3

400 Bad RequestBackbone.js / node.jsアプリをHerokuにデプロイすると、エラーが発生します。

ログから:

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)

Chrome devtoolsの[ネットワーク]タブから:

ここに画像の説明を入力してください

で実行している場合、エラーは表示されませんlocalhost

ここに画像の説明を入力してください

興味深いことに、URLへの直接アクセスは正常に機能します。手動jQuery.ajax()呼び出しも正常に機能します。このBackbone.sync呼び出しは、リソースが失敗する唯一のインスタンスですが、一貫して失敗します。

Herokuにデプロイするときに、このBackbone / node / express 400 Bad Requestエラーはどうなりますか?私の推測では、プロキシ/ルーターアーティファクトに関連するものがありますx-forwarded-forが、現時点では、エラーがバックボーン、エクスプレス、またはHerokuレベルのいずれであるかはわかりません。

バックボーンリクエストヘッダー(400 Bad Request)

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

ヘッダーの差分は次のとおりです(より大きなバージョンはこちら):

ここに画像の説明を入力してください

4

2 に答える 2

2

2行の調査をお勧めします。

  1. URLがJSONに応答していません:このURLが応答しているものと、適切なJSONに応答していない理由を確認してください。クライアントが期待しているヘッダーが表示application/json, text/javascript, */*; q=0.01され、URLが応答している場合text/plain

  2. CROSS-Domainの問題があります:CROSS-Domainに関するすべての問題を確認してください

于 2012-06-27T11:50:18.363 に答える
2

あなたがこれをまだ試したかどうかはわかりませんが、昔ながらの方法を使用する代わりにサーバーから応答を送信する場合

response.send(response to send);

使ってみてください

response.json(response to send);

代わりは。

私はこれと同じエラーが表示され、切り替えた後すぐに解決策を見つけることができませんでした。お役に立てれば。

于 2012-06-30T00:40:03.273 に答える