我无法区分ajax呼叫与ExpressJS中的其他呼叫。
据我了解,我可以使用request.accepts('json')
来识别json请求吗?
问题是 - 显然,每个电话都接受一切!
app.get( '*', function(request, response, next ) {
console.log('request accepts:')
if( request.accepts( 'json' ) ){
console.log( '--> accepts json' )
}
if( request.accepts( 'html' ) ){
console.log( '--> accepts html' )
}
if( request.accepts( 'blah' ) ){
console.log( '--> accepts blah' ) // this does not show up
}
if( request.accepts( 'application/json' ) ){
console.log( '--> accepts json2' )
}
next()
} )
如果我只是访问该页面,它会接受json和html。
如果我尝试使用$.getJSON( ... url ... )
,它还会接受json和html。
Headers:
Browser: "Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
Ajax: "Accept application/json, text/javascript, */*; q=0.01"
我不是接受标头的专家,但似乎*/*
部分可能是问题。
如何在ExpressJS中确定正确(或者可能是第一个)接受类型? 或者:我如何区分JSON请求和正常的页面访问?
答案 0 :(得分:0)
浏览器发出的几乎所有GET请求都以*/*
结束,这意味着它几乎可以接受所有内容。为了做出决定,您可以检查req.accepted
数组。它看起来像这样:
[ { value: 'application/json',
quality: 1,
type: 'application',
subtype: 'json' },
{ value: 'text/html',
quality: 0.5,
type: 'text',
subtype: 'html' } ]
因此,如果存在JSON,则它是一个特殊请求,否则它是一个简单的请求
答案 1 :(得分:-1)
通过使用accepts()
的数组:
if( request.accepts( [ 'json', 'html' ] ) == 'json' ) {
// do something
} else {
// do something else
}