无法使用 Express 4 路由器获取内容类型标头



我试图根据请求中的Content-Type标头返回不同的内容:纯文本或JSON对象。在Express3.x中,我使用req.accepted('application/json')来确定用户是否要求JSON。但是CCD_ 3在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中获取标头类型并正确处理?赫罗库是不是以某种方式削球了?或者可能是那些新的中间件?

更新:我刚刚验证了每次使用CURL都有效,使用浏览器会在本地和Heroku上为req.get('Content-Type')生成undefined,所以这不是Heroku的问题。尽管如此,我还是需要头球。

GET请求上检查Content-Type是没有意义的。Content-Type报头定义了请求主体中的类型数据,而GET请求没有主体。req.is也检查了这一点,所以在这种情况下它也是无用的。

您应该从制作GET的客户端将Accept标头设置为application/json,并在服务器上使用req.accepts('json')来验证客户端是否表示支持JSON。

相关内容

  • 没有找到相关文章

最新更新