1. ホーム
  2. node.js

[解決済み] res.send "の後にコードを実行できるのはなぜですか?

2023-03-20 04:32:16

質問

以下のコードの動作はどのような仕組みになっているのでしょうか。

res.send(200, { data: 'test data' });
console.log('still here...');

私の理解では res.send を返す を返しますが、関数 接続を閉じる / リクエストを終了する . このことは、なぜ res.send コマンドの後にコードを実行できる理由を説明することができます (私は express のソースに目を通しましたが、非同期関数ではないようです)。

私が見逃している可能性のある他の何かが作用しているのでしょうか?

どのように解決するのですか?

もちろん end は HTTP レスポンスを終了させますが、あなたのコードに特別なことをするわけではありません。

レスポンスを終了させた後でも、他のことを続けることができます。

あなたが できないこと で何か便利なことをすることはできません。 res . レスポンスが終わっているので、それ以上データを書き込むことはできません。

res.send(...);
res.write('more stuff'); // throws an error since res is now closed

この動作は、HTTPリクエストに対してスレッドを割り当て、レスポンスが終了したらスレッドを終了させる他の伝統的なフレームワーク(PHP、ASPなど)とは異なります。 もし、ASP のような同等の関数を呼び出した場合 Response.End のような同等の関数を呼び出すと、スレッドが終了し、コードの実行が停止します。 nodeでは、停止するスレッドはありません。 reqres はもうイベントを発生させませんが、コールバックのコードは自由に実行し続けることができます (ただし、そのコードが res のメソッドを呼び出そうとしない限り)。