Javascript 在Node.js/Express中,我如何自动将此标题添加到每个";渲染“;回应?
我有许多这样的“控制器”: 注意res.render?我想将此标题添加到我所做的每个响应标题中: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 })
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)