Je dois configurer CORS pour qu'il soit activé sur les scripts servis par express. Comment définir les en-têtes de ces réponses renvoyées pour public/assets?
Il existe au moins un middleware sur npm pour gérer CORS dans Express: cors . [voir la réponse @mscdex]
Voici comment définir des en-têtes de réponse personnalisés, à partir de ExpressJS DOC
res.set(field, [value])
Définir le champ d'en-tête sur valeur
res.set('Content-Type', 'text/plain');
ou passez un objet pour définir plusieurs champs à la fois.
res.set({
'Content-Type': 'text/plain',
'Content-Length': '123',
'ETag': '12345'
})
Aliasé comme
res.header(field, [value])
C'est tellement énervant.
OK si quelqu'un a encore des problèmes ou ne veut tout simplement pas ajouter une autre bibliothèque. Tout ce que vous avez à faire est de placer cette ligne de code intermédiaire avant vos itinéraires.
Exemple Cors
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)=> {...});
Il existe au moins un middleware sur npm pour gérer CORS dans Express: cors .
Vous pouvez le faire en utilisant cors. cors gérera votre réponse de la SCRO
var cors = require('cors')
app.use(cors());
La réponse de @ klode est juste.
Cependant, vous êtes censé définir un autre en-tête de réponse pour rendre votre en-tête accessible aux autres.
Exemple:
Tout d'abord, vous ajoutez 'page-size' dans l'en-tête de la réponse
response.set('page-size', 20);
Ensuite, tout ce que vous avez à faire est d’exposer votre en-tête
response.set('Access-Control-Expose-Headers', 'page-size')
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();
});
Vous pouvez également ajouter un middleware pour ajouter des en-têtes CORS. Ceci pourrait fonctionner:
/**
* 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();
}
};
Réponse courte:
res.setHeaders - appelle la méthode Node native
res.set - définit les en-têtes
res.headers - un alias à res.set