ExpressJS에서 다른 호출과 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 요청을 일반 페이지 뷰와 구분하는 방법은 무엇입니까?
왜 처음부터 이렇게해야할까요? 동일한 URL에서 다른 데이터 유형을 제공해야하는 경우 대부분의 API는'/ path/to/server? format = json'과 같은 쿼리 매개 변수를 사용합니다. – charlietfl
@charlietfl 경로 주체없는 미들웨어가 있기 때문에이 주된 이유가 있습니다. 모든 경우에 호출 됨) json 기반 호출 중에는 비활성화하려고합니다. 경로 라우팅이 이후에 발생하는 것 같기 때문에, 플래그를 설정할 수 없습니다 (너무 늦었 기 때문에). 2 가지 옵션을 볼 수 있습니다 : 라우팅을 시뮬레이트하는 미들웨어를 만들고 특정 경로 (meh!)가 호출되었는지 확인하거나 단순히 허용 된 유형을 확인하십시오. – Katai
json에게만 서비스하는 REST API가 있다고 가정하면 경로에''/ api/"'와 같은 api의 주 경로가 포함되어 있는지 확인할 수 없습니다. 이상한 문제가있는 것 같습니다. – charlietfl