express正在重写我的内容类型'来自' application / json#39的标题;到#text / plain'

时间:2015-03-16 05:09:27

标签: json node.js express content-type

我有一个使用最新快递3.x(3.18.3)的应用程序,它返回一些JSON数据。我正在设置内容类型标题如下:

res.setHeader('content-type', 'application/json')

但我注意到在返回的回复中,内容类型'标头设置为' text / plain' ??

1 个答案:

答案 0 :(得分:1)

事实证明,如果您使用express-json,那么当您通过设计调用res.send此模块时,将检查请求是否具有`accept:' application / json&# 39;标头集,如果没有,它会将您的内容类型响应标头重写为&text; / text' !

这是两个简单的解决方案:

  1. 如果可以控制客户端,则设置HTTP请求的接受标头。
  2. 除非你想要这种行为,否则不要使用express-json
  3. 重写express-json包版本1.0.0中的标头的代码:

    (function (exports, require, module, __filename, __dirname) { module.exports = function () {
        return function (req, res, next) {
            var json = res.json;
            res.json = function () {
                if (!req.headers.accept || req.headers.accept.indexOf('application/json') === -1) {
                    res.contentType('text/plain');
                }
                json.apply(res, arguments);
            };
            next();
        };
    };
    

    这是从切换块的res.send情况中的object函数直接调用的,已加载的IFF express-json