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')
将正常工作。