1

res.send()Express フレームワークを使用すると、奇妙な動作が発生します。

これが私の機能です:

user.register(function(err, result) {
    console.log(JSON.stringify(err || result));
    res.send(JSON.stringify(err || result));
});

エラーまたは結果オブジェクトを受け取ります。の例を次に示しconsole.log()ます。

{"name":"AuthError","message":"Password confirmation does not match original password","code":36}

ただし、クライアントが受け取る応答は次のとおりです。

{"name":"AuthError","message":"Password confirmation does not match

これは、受け取ったエラーで発生します。単純な JSON 文字列を送信しようとしているだけなので、なぜこれが起こっているのかわかりません。これの考えられる原因を誰か教えてもらえますか?

編集:私はこの問題を解決しましたが、誰かがその背後にある理由を説明できれば幸いです.

エラーが発生するたびに関数を終了するのを忘れuser.register()、それにもかかわらずデータベースへのクエリを続行しました。関数が適切に終了したことを確認すると、応答が完全に受信されます...しかし、これの原因は何でしょうか?

res.send()最初の呼び出しが完了する前に複数の場所が呼び出されたためですか (user.register()適切に終了しないと、関数は複数のコールバック呼び出しを行います)? コンソールに記録された例外はありませんでした。

4

2 に答える 2

0

Express 3.3.4 でも同様の問題があり、Express 3.15.0 に更新した後、問題のコードを見つけました。

私の場合、return res.json()を 2 回呼び出しました。同じことをしないようにしてください。新しい Express バージョンでは、これらの状況がコンソールに通知されます。

于 2014-09-12T13:24:11.427 に答える