Node.js NodeJS/Express:如何将自定义头设置为所有res.render而不是res.send?

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

我的Express服务器上有多个中间件。我想为所有
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