39 votes

Dans Node.js/Express, comment ajouter automatiquement cet en-tête à chaque réponse "render" ?

Je possède plusieurs de ces "contrôleurs" :

app.get('/',function(req,res){
    var stuff = { 'title': 'blah' };
    res.render('mytemplate',stuff);
});    

Avis res.render ? Je veux ajouter cet en-tête à chaque en-tête de réponse que je crée :

X-XSS-Protection: 0

Comment ajouter automatiquement cet en-tête de réponse ?

80voto

Francesc Rosàs Points 1204

Vous voudrez probablement utiliser app.use avec votre propre logiciel intermédiaire :

app.use(function(req, res, next) {
    res.header('X-XSS-Protection', 0);
    next();
});

75voto

BGerrissen Points 9274
// global controller
app.get('/*',function(req,res,next){
    res.header('X-XSS-Protection' , 0 );
    next(); // http://expressjs.com/guide.html#passing-route control
});

Assurez-vous que c'est le premier contrôleur que vous ajoutez, car l'ordre est important.

15voto

wilmoore Points 2973

Pour express 4.x, la méthode idiomatique est la suivante :

Mise en œuvre

// no mount path; executed for every request.
app.use(function (req, res, next) {
  res.set('X-XSS-Protection', 0);
  next();
});

Test

describe('Response Headers', function () {
  it('responds with header X-XSS-Protection: 0', function (done) {
    hippie(app)
    .get('/any/route/you/can/think/of')
    .expectHeader('X-XSS-Protection', 0)
    .end(done);
  });
});

Dépendances de développement (pour que les tests fonctionnent)

% npm install --save-dev mocha hippie

Documentation pertinente

7voto

pkyeck Points 6158

Vous pouvez créer votre propre méthode d'intergiciel comme suit :

addToHeader = function (req, res, next) {
  console.log("add to header called ... " + req.url);
  res.header('X-XSS-Protection', '0');
  next();
}

et modifiez ensuite vos itinéraires de la manière suivante :

app.get('/', addToHeader, function(req,res){
  var stuff = { 'title': 'blah' };
  res.render('mytemplate',stuff);
});

devrait fonctionner.

4voto

Evandro Points 926

Utiliser un intergiciel ...

app.use(function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "*")
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept")
  next()
})

Mais veillez à l'utiliser avant votre méthode API. Comme ceci :

const app = express()

// middleware
app.use(function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "*")
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept")
  next()
})

// api
app.get('/user', (req, res, next) => {
  service.doSomething
    .then(data => res.send(data))
    .catch(next)
})

app.use(handleError)

Il m'a fallu un certain temps pour comprendre. Je ne l'ai vu mentionné nulle part, alors j'ajoute ceci pour compléter les réponses précédentes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X