Node.js NodeJS/Express:如何将自定义头设置为所有res.render而不是res.send?
我的Express服务器上有多个中间件。我想为所有Node.js NodeJS/Express:如何将自定义头设置为所有res.render而不是res.send?,node.js,express,Node.js,Express,我的Express服务器上有多个中间件。我想为所有res.renders设置相同的自定义标题。但是,我不希望它们与res.sends一起发送 我找到了这个。但是,这样做将为服务器发送的所有响应设置标题,包括res.renders和res.sends 是否有一种方法可以影响所有res.renders而不影响res.sends 谢谢大家! 另一种方法是覆盖顶级中间件中的res.render方法,调用时设置所需的头并调用原始render方法,如下所示: // top middleware app.us
res.render
s设置相同的自定义标题。但是,我不希望它们与res.send
s一起发送
我找到了这个。但是,这样做将为服务器发送的所有响应设置标题,包括res.render
s和res.send
s
是否有一种方法可以影响所有res.render
s而不影响res.send
s
谢谢大家! 另一种方法是覆盖顶级中间件中的
res.render
方法,调用时设置所需的头并调用原始render
方法,如下所示:
// top middleware
app.use(function overrideRender(req, res, next) {
const originalRender = res.render;
res.render = function customRender() {
// set your headers here
originalRender.apply(res, arguments);
};
next();
});
另一种方法是覆盖顶级中间件中的
res.render
方法,调用时设置所需的头并调用原始render
方法,如下所示:
// top middleware
app.use(function overrideRender(req, res, next) {
const originalRender = res.render;
res.render = function customRender() {
// set your headers here
originalRender.apply(res, arguments);
};
next();
});
该方法可以接受端点数组作为参数,您可以将数组中的所有路由(包含res.render
method)分组,并在用户到达其中一个路由时调用指定的中间件:
var routes = [
'/route/1/',
'/route/2/',
'/route/3/',
];
app.use( routes, function (req, res, next) {
res.setHeader('header' , 'value' );
next();
});
该方法可以接受端点数组作为参数,您可以将数组中的所有路由(包含res.render
method)分组,并在用户到达其中一个路由时调用指定的中间件:
var routes = [
'/route/1/',
'/route/2/',
'/route/3/',
];
app.use( routes, function (req, res, next) {
res.setHeader('header' , 'value' );
next();
});
我认为这是唯一可行的方法,如果您指定一个如上面答案中所示的中间件,但您有条件地检查是否设置内容。你的用例是什么?@FranciscoMateo是的,条件部分是我试图避免的部分;我目前大约有40个
res.render
s和40个res.send
s。我试图避免在一个接一个地检查它们时犯错误的风险/我认为这是唯一可行的方法,如果您指定一个如上面答案中所示的中间件,但您有条件地检查是否设置内容。你的用例是什么?@FranciscoMateo是的,条件部分是我试图避免的部分;我目前大约有40个res.render
s和40个res.send
s。我试图避免在一个接一个地检查它们时犯错误的风险/抱歉,但是这部分是什么originalRender.apply(res,arguments)代码>正在做什么originalRender
是res.render
,那么什么是res.render.apply
?谢谢你的原创渲染(res,arguments)代码>正在执行以下操作:-将res
参数作为此
上下文传递给,以不破坏原始实现。-arguments
参数只是在调用res.render(arg1,arg2,argn)
时传递所有提供的参数。请看一下apply的官方文档:我认为您的最后一条评论缺少了一些文本对不起,但是这部分是什么originalRender.apply(res,arguments)代码>正在做什么originalRender
是res.render
,那么什么是res.render.apply
?谢谢你的原创渲染(res,arguments)代码>正在执行以下操作:-将res
参数作为此
上下文传递给,以不破坏原始实现。-arguments
参数只是在调用res.render(arg1,arg2,argn)
时传递所有提供的参数。请看一下apply here的官方文档:我认为您的最后一条评论缺少一些文本OK,但如果一条路由同时具有res.render
和res.send
:DAlright,则该评论不起作用,但如果一条路由同时具有res.render
和res.send
:D