Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Can';使用Express 4路由器无法获取内容类型标头_Node.js_Heroku_Express_Http Headers - Fatal编程技术网

Node.js Can';使用Express 4路由器无法获取内容类型标头

Node.js Can';使用Express 4路由器无法获取内容类型标头,node.js,heroku,express,http-headers,Node.js,Heroku,Express,Http Headers,我试图根据请求中的内容类型头返回不同的内容:纯文本或JSON对象。在Express3.x中,我使用req.accepted('application/json')来确定用户是否要求json。但是req.accepted()在4.x中已被弃用 我尝试了req.is()。最后,我求助于: var router = require('express').Router(); router.get('/ping', function(req, res) { var serverTime = (ne

我试图根据请求中的
内容类型
头返回不同的内容:纯文本或JSON对象。在Express3.x中,我使用
req.accepted('application/json')
来确定用户是否要求json。但是
req.accepted()
在4.x中已被弃用

我尝试了
req.is()。最后,我求助于:

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')
生成
未定义的
,所以这不是Heroku的问题。但是,我仍然需要标题。

GET
请求上检查
内容类型
,没有意义。
Content-Type
头定义了请求正文中的类型数据,而
GET
请求没有正文
req.is
也会检查这个,所以在这种情况下它也没用


您应该将客户机发出的
GET
Accept
标题设置为
application/json
,并在服务器上使用
req.accepts('json')
,以验证客户机是否表示支持json。

GET
请求上检查
内容类型
没有意义。
Content-Type
头定义了请求正文中的类型数据,而
GET
请求没有正文
req.is
也会检查这个,所以在这种情况下它也没用


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

谢谢!我猜我是在混合标题(使用CURL进行测试允许我在GET中添加内容类型,即使它不属于GET)。但是,除非另有规定,否则regular将获得accept/这意味着对
req.accepts('application/json')
的检查将返回true。如何唯一地测试一个指定的
应用程序/json
?好的,如果(!req.accepts('*/*')和&req.accepts('application/json')){
,最后使用
,谢谢你将m设置在正确的轨道上!无需检查
*/*
req.accepts('json')
就可以正常工作了。谢谢!我想我是在混合了标题(使用CURL进行测试允许我甚至向GET添加内容类型,即使它不属于那里)
将返回true。如何唯一地测试指定的
应用程序/json
?好的,如果(!req.accepts('*/*')和&req.accepts('application/json')){
,那么最后使用
,感谢您将m设置在正确的轨道上!无需检查
*/*
req.accepts('json')
将正常工作。