Express.js - 如何设置所有响应的头信息

49

我正在使用Express提供Web服务,我需要响应以utf-8编码。

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

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

在express应用程序中,是否有一种清晰的方式来设置所有响应的header或charset?

1个回答

78

只需使用一个适用于所有路由的中间件声明:

// 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 中间件 文档


如果控制器生成响应后您想要执行此操作怎么办?假设您添加的标头取决于响应正文,例如正文的字符串长度或哈希值?我已经尝试过了,但是响应正文始终为空,因为它似乎在之前就被执行了。 - Miguel Mesquita Alfaiate
1
@BlunT - 你不能这样做。在发送正文之前,头部信息已经被发送了。Express会缓存头部信息并在开始写入正文时立即发送它们。因此,一旦你开始发送正文,就无法再添加或修改头部信息。如果你需要在头部中使用哈希值,则必须预先计算要发送的内容,计算哈希值并在开始写入正文之前设置该头部信息。或者,选择一种格式来指定正文数据的属性,并将其放置在正文末尾(而不是在头部中,头部始终位于正文之前)。 - jfriend00
我正在寻找一个类似于“beforeSend”事件的东西。我已经找到了解决方案,有人回答了我的问题:https://stackoverflow.com/questions/52201380/add-header-to-all-responses-after-processing-but-before-sending-to-client - Miguel Mesquita Alfaiate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接