var requestType = req.get('Content-Type');如果在请求中实际指定了内容类型,则绝对有效(我刚刚在几分钟前对此进行了重新验证)。如果未定义内容类型,则它将是未定义的。请记住,通常只有POST和PUT请求会指定内容类型。其他请求(例如GET)通常会指定接受类型的列表,但这显然不是同一回事。编辑:
好吧,我现在更好地理解了你的问题。您在谈论的是Accept:标头,而不是内容类型。
这是正在发生的事情:请注意
*/*;q=0.8列出的接受类型末尾的?本质上说“我会接受任何东西”。因此,
req.accepts('json')总是会返回,"json"因为从技术上讲,它是一种可接受的内容类型。
我认为您想要的是查看是否
application/json已明确列出,如果是,则以json响应,否则以html响应。这可以通过以下两种方法完成:
// a normal loop could also be used in place of array.some()if(req.accepted.some(function(type) {return type.value === 'application/json';}){ //respond json} else { //respond in html}或使用简单的正则表达式:
if(/application/json;/.test(req.get('accept'))) { //respond json} else { //respond in html}


