Node.js Express.js-如何为所有响应设置标题

Node.js Express.js-如何为所有响应设置标题,node.js,express,http-headers,Node.js,Express,Http Headers,我正在使用Express for web services,需要将响应编码为utf-8 我知道我可以对每个响应执行以下操作: response.setHeader('charset', 'utf-8'); 有没有一种干净的方法可以为express应用程序发送的所有响应设置头或字符集?只需使用一个对所有路由执行的中间件语句: // a middleware with no mount path; gets executed for every request to the app app.use

我正在使用Express for web services,需要将响应编码为utf-8

我知道我可以对每个响应执行以下操作:

response.setHeader('charset', 'utf-8');

有没有一种干净的方法可以为express应用程序发送的所有响应设置头或字符集?

只需使用一个对所有路由执行的中间件语句:

// a middleware with no mount path; gets executed for every request to the app
app.use(function(req, res, next) {
  res.setHeader('charset', 'utf-8')
  next();
});
并且,确保在您希望将其应用于任何路由之前已注册:

app.use(...);
app.get('/index.html', ...);

Express middleware.

如果您想在控制器生成响应后执行此操作,该怎么办?如果要添加的标题取决于响应主体?类似于字符串长度或散列体?我已经试过了,但是响应的主体总是空的,因为它似乎是以前执行过的。@BlunT-你不能这么做。在发送正文之前发送标头。Express缓存头值,并在您开始写入正文时立即发送它们。因此,一旦开始发送正文,就不能再添加或修改标题。如果您需要在头中使用散列,那么您必须在开始编写正文之前预先发送要发送的内容,计算散列并设置该头。或者,为正文数据选择一种格式,该格式允许您将属性指定为正文的一部分,并位于正文的末尾(而不是始终位于正文前面的标题中)。I wsa正在查找“beforeSend”事件或类似事件。我已经找到了解决办法,有人回答了我的问题: