【问题标题】:Express.js - How to set a header to all responsesExpress.js - 如何为所有响应设置标题
【发布时间】:2015-10-18 03:09:58
【问题描述】:

我将 Express 用于 Web 服务,我需要将响应编码为 utf-8。

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

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

是否有一种简洁的方法可以为 express 应用程序发送的所有响应设置标头或字符集?

【问题讨论】:

    标签: node.js express http-headers


    【解决方案1】:

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

    // 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', ...);
    

    快递中间件documentation here.

    【讨论】:

    • 如果您想在控制器生成响应后执行此操作怎么办?如果您添加的标头取决于响应正文?诸如字符串长度或正文的哈希之类的东西?我已经尝试过了,但是响应的主体总是空的,因为它似乎以前执行过。
    • @BlunT - 你不能那样做。在发送正文之前发送标头。 Express 缓存标头值并在您开始编写正文时立即发送它们。因此,一旦您开始发送正文,就不能再添加或修改标题。如果您需要在标头中使用哈希,那么您必须在开始编写正文之前预先计算您要发送的内容并计算哈希并设置该标头。或者,为正文数据选择一种格式,允许您将属性指定为正文的一部分并位于正文的末尾(而不是始终位于正文之前的标题中)。
    • 我正在寻找“beforeSend”事件或类似事件。我已经找到了解决方案,有人回答了我的问题:stackoverflow.com/questions/52201380/…
    猜你喜欢
    • 2015-08-23
    • 2014-07-08
    • 2018-09-12
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    相关资源
    最近更新 更多