Ich muss CORS so einstellen, dass es für Skripte aktiviert ist, die von Express bereitgestellt werden. Wie kann ich die Header in diesen zurückgegebenen Antworten für public / Assets festlegen?
Ich muss CORS so einstellen, dass es für Skripte aktiviert ist, die von Express bereitgestellt werden. Wie kann ich die Header in diesen zurückgegebenen Antworten für public / Assets festlegen?
Antworten:
Auf npm gibt es mindestens eine Middleware für die Verarbeitung von CORS in Express: cors . [siehe @ mscdex Antwort]
So legen Sie benutzerdefinierte Antwortheader im ExpressJS-DOC fest
res.set(field, [value])
Setzen Sie das Header-Feld auf den Wert
res.set('Content-Type', 'text/plain');
oder übergeben Sie ein Objekt, um mehrere Felder gleichzeitig festzulegen.
res.set({
'Content-Type': 'text/plain',
'Content-Length': '123',
'ETag': '12345'
})
Aliased als
res.header(field, [value])
res.write('content')
?
res.set
hat es bei mir nicht funktioniert, aber die cors
Middleware hat den Trick genau richtig gemacht.
Das ist so nervig.
Okay, wenn noch jemand Probleme hat oder einfach keine weitere Bibliothek hinzufügen möchte. Alles, was Sie tun müssen, ist, diese mittlere Codezeile vor Ihren Routen zu platzieren.
Cors Beispiel
app.use((req, res, next) => {
res.append('Access-Control-Allow-Origin', ['*']);
res.append('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.append('Access-Control-Allow-Headers', 'Content-Type');
next();
});
// Express routes
app.get('/api/examples', (req, res)=> {...});
Sie können dies mit cors tun. cors kümmert sich um Ihre CORS-Antwort
var cors = require('cors')
app.use(cors());
Sie können auch eine Middleware hinzufügen, um CORS-Header hinzuzufügen. So etwas würde funktionieren:
/**
* Adds CORS headers to the response
*
* {@link https://en.wikipedia.org/wiki/Cross-origin_resource_sharing}
* {@link http://expressjs.com/en/4x/api.html#res.set}
* @param {object} request the Request object
* @param {object} response the Response object
* @param {function} next function to continue execution
* @returns {void}
* @example
* <code>
* const express = require('express');
* const corsHeaders = require('./middleware/cors-headers');
*
* const app = express();
* app.use(corsHeaders);
* </code>
*/
module.exports = (request, response, next) => {
// http://expressjs.com/en/4x/api.html#res.set
response.set({
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'DELETE,GET,PATCH,POST,PUT',
'Access-Control-Allow-Headers': 'Content-Type,Authorization'
});
// intercept OPTIONS method
if(request.method === 'OPTIONS') {
response.send(200);
} else {
next();
}
};
service.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
next();
});
@ klodes Antwort ist richtig.
Sie sollten jedoch einen anderen Antwortheader festlegen, um Ihren Header für andere zugänglich zu machen.
Beispiel:
Zuerst fügen Sie im Antwortheader die Seitengröße hinzu
response.set('page-size', 20);
Dann müssen Sie nur noch Ihren Header offenlegen
response.set('Access-Control-Expose-Headers', 'page-size')
javascript res.set("...","..."); res.set("...","....");
Wie legen Sie nun diese beiden Header frei?
javascript Access-Control-Expose-Headers: * // or Access-Control-Expose-Headers: <header-name>, <header-name>, ...
res
Objekt gesetzt habe. Wenn ich versuche, diesen Inhalt zu sehen, gehe ich undefiniert mitres.headers
;