【发布时间】:2014-05-27 03:02:43
【问题描述】:
我正在尝试根据请求中的 Content-Type 标头返回不同的内容:纯文本或 JSON 对象。在 Express 3.x 中,我使用 req.accepted('application/json') 来确定用户是否请求 JSON。但req.accepted() 在 4.x 中已被弃用。
我尝试了 req.is() - 返回了 undefined 和 req.accepts() - 没用。最后,我求助于:
var router = require('express').Router();
router.get('/ping', function(req, res) {
var serverTime = (new Date()).toLocaleString();
if(req.get('Content-Type').indexOf('json') !== -1) {
res.set({'Content-Type': 'application/json'});
res.send({serverTime: serverTime});
}
else {
res.send('serverTime: ' + serverTime);
}
});
这在 localhost 上效果很好(用 CURL 测试),但是一旦我部署到 Heroku,我就会得到:
TypeError: Cannot call method 'indexOf' of undefined at
Object.router.get.res.set.Content-Type [as handle]
如何获取 Express 4 中的标头类型并正确处理? Heroku 是否以某种方式剥离了标题?或者可能是那些新的中间件?
更新:我刚刚验证了每次使用 CURL 都有效,在本地和 Heroku 上使用浏览器会为 req.get('Content-Type') 生成 undefined - 所以这不是 Heroku 问题。不过,我需要标题。
【问题讨论】:
标签: node.js heroku express http-headers