Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Node.js/Express中,我如何自动将此标题添加到每个";渲染“;回应?_Javascript_Node.js_Http_Express_Url - Fatal编程技术网

Javascript 在Node.js/Express中,我如何自动将此标题添加到每个";渲染“;回应?

Javascript 在Node.js/Express中,我如何自动将此标题添加到每个";渲染“;回应?,javascript,node.js,http,express,url,Javascript,Node.js,Http,Express,Url,我有许多这样的“控制器”: 注意res.render?我想将此标题添加到我所做的每个响应标题中: X-XSS-Protection:0 如何自动添加该响应标题 // global controller app.get('/*',function(req,res,next){ res.header('X-XSS-Protection' , 0 ); next(); // http://expressjs.com/guide.html#passing-route control })

我有许多这样的“控制器”:

注意res.render?我想将此标题添加到我所做的每个响应标题中:

X-XSS-Protection:0

如何自动添加该响应标题

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

只需确保这是您添加的第一个控制器,顺序非常重要。

您可以创建自己的中间件方法,如下所示:

addToHeader = function (req, res, next) {
  console.log("add to header called ... " + req.url);
  res.header('X-XSS-Protection', '0');
  next();
}
然后把你的路线改成这样:

app.get('/', addToHeader, function(req,res){
  var stuff = { 'title': 'blah' };
  res.render('mytemplate',stuff);
});
应该可以工作。

您可能希望与自己的中间件一起使用:

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

对于express 4.x,惯用方式如下:

实施 试验 开发依赖项(用于测试工作) 相关文件

我发现另一个注入默认头的好地方是在路由中间件期间。这样,路由器实例控制的所有路由都将接收报头

例如:

/。。。
var router=express.router();
//所有路由的中间件
路由器使用(功能(req、res、next){
//注入默认标题
res.header('cache-control','private,max age=0');
res.header('expires',新日期(Date.now()).toutString());
next();
});
//下面的所有路由现在都将继承
//中间件的默认头
路由器.get('/users',函数(req,res){
//我将返回带有默认标题的用户列表
// ...
});

我想指出的是,这些答案实际上都不能回答这个问题;该问题具体涉及提交答复;e、 g.对于以下应用程序:

const router = require('express').Router();
router.use('/test.json', (req, res) => res.json({ test: 'hi' });
router.use('/test.html', (req, res) => res.render('test'));
目前尚不清楚如何仅向HTML响应添加标题(例如,CSP标题,可能非常冗长)。Express没有专门做这件事的钩子。目前唯一的选择是组织代码,这样就不必这样做,例如:

app.use(jsonRouter);
app.use(htmlRouter);
…这允许您按照其他一些答案的建议进行操作,并添加用于设置标题的通用中间件。

使用

但是请确保在使用API方法之前使用它。像这样:

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)

我花了一段时间才弄明白。我没有看到任何地方提到过它,所以添加这个来补充前面的答案。

aahh,这个似乎更好如果你真的想在所有调用中添加header参数,这比在每个路由中添加中间件调用要短得多。因此,通过添加这个作为第一个控制器,我的所有其他控制器的响应中都会包含该标题?好的,因此可以通过多个控制器路由响应。这已过时,请参见下文。这是每个人现在都应该使用的。是的,这是Express 4中的方式。始终使用
app。使用
比例外答案要好得多。注意
res.set
是此处使用的方法--
res.header
--的别名,我认为这个答案是我们都在寻找的答案:
% npm install --save-dev mocha hippie
const router = require('express').Router();
router.use('/test.json', (req, res) => res.json({ test: 'hi' });
router.use('/test.html', (req, res) => res.render('test'));
app.use(jsonRouter);
app.use(htmlRouter);
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()
})
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)