Heroku에 Backbone.js/node.js 앱을 배포 할 때 400 Bad Request
오류가 발생합니다. 로그에서Heroku에 배포 할 때 Backbone/node/express 400 Bad Request 오류가 발생했습니다.
:
Error: Bad Request
at Object.error (/app/node_modules/express/node_modules/connect/lib/utils.js:42:13)
at IncomingMessage.<anonymous> (/app/node_modules/express/node_modules/connect/lib/middleware/json.js:57:73)
at IncomingMessage.emit (events.js:64:17)
at HTTPParser.parserOnMessageComplete [as onMessageComplete] (http.js:130:23)
at Socket.ondata (http.js:1506:22)
at TCP.onread (net.js:374:27)
크롬의 네트워크 탭에서이 DevTools로 : localhost
에서 실행할 때
오류가 표시되지 않습니다. URL이 잘 작동에
흥미롭게도, 직접 얻을. 설명서 jQuery.ajax()
도 제대로 작동합니다. 이 Backbone.sync
호출은 리소스가 실패하지만 일관되게 실패하는 유일한 인스턴스입니다.
백본/노드/익스프레스 400 헤로 쿠에 배포 할 때 잘못된 요청 오류가 발생 했습니까? 내 생각 엔 x-forwarded-for
과 같은 프록시/라우터 아티팩트와 관련된 것이지만 오류가 백본, 익스프레스 또는 헤로 쿠 수준에 있는지는 알 수 없습니다.
백본 요청 헤더 (400 잘못된 요청)
GET /services HTTP/1.1
Host: karmr.herokuapp.com
Connection: keep-alive
Cache-Control: max-age=0
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1082.0 Safari/536.5
Content-Type: application/json
Accept: application/json, text/javascript, */*; q=0.01
Referer: http://karmr.herokuapp.com/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
HTTP/1.1 400 Bad Request
Content-Type: text/plain
X-Powered-By: Express
Content-Length: 420
Connection: keep-alive
직접 GET
(200 OK) : 여기
GET /services HTTP/1.1
Host: karmr.herokuapp.com
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1082.0 Safari/536.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
X-Powered-By: Express
Content-Length: 84
Connection: keep-alive
은 (bigger version here) 헤더 차이점이다 :
이것은 수정의 일종으로 밝혀졌습니다. 명백하게 표현 체가 미들웨어를 파싱하는 버그였습니다. 해결 미들웨어 호출을 제거하지만, 그래서이 믿을 것이다. – buley
트릭을 수행 했습니까? 나는 backbone.sync가'Content-Type : application/json' 요청 헤더를 설정했기 때문에 (backbone 위에 구축 된 spine.js에서) 같은 문제를 보았습니다. , 서버 (또는 body 파서, 아마?)는 요청의'body'가 비어 있지 않을 것으로 기대합니다. 아직 해결책은 없지만, 한가지 방법으로'bodyParser'를 비활성화하는 것을 좋아하지 않습니다! ** 편집 : ** BodyParser가이 문제를 일으키는 것으로 확인했습니다. – Fabdrol