我有一个使用最新快递3.x(3.18.3)的应用程序,它返回一些JSON数据。我正在设置内容类型标题如下:
res.setHeader('content-type', 'application/json')
但我注意到在返回的回复中,内容类型'标头设置为' text / plain' ??
答案 0 :(得分:1)
事实证明,如果您使用express-json
,那么当您通过设计调用res.send
此模块时,将检查请求是否具有`accept:' application / json&# 39;标头集,如果没有,它会将您的内容类型响应标头重写为&text; / text' !
这是两个简单的解决方案:
重写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