[解決済み] 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では、停止するスレッドはありません。
req
と
res
はもうイベントを発生させませんが、コールバックのコードは自由に実行し続けることができます (ただし、そのコードが
res
のメソッドを呼び出そうとしない限り)。
関連
-
[解決済み】エラーです。EACCES: 権限が拒否されました、アクセス '/usr/local/lib/node_modules' 。
-
[解決済み】モジュール 'internal/util/types' が見つかりません。
-
[解決済み] EventEmitter のメモリリークの可能性が検出された
-
[解決済み] E: npm パッケージを見つけることができません。
-
[解決済み] ExpressJS : res.redirect()が期待通りに動作しない?
-
[解決済み] Node.jsのnpmモジュールをアンインストールするにはどうすればよいですか?
-
[解決済み] エラーが発生しました。クライアントに送信された後にヘッダーを設定できない
-
[解決済み] OPTIONSルートにCORSヘッダを追加しても、ブラウザが私のAPIにアクセスできないのはなぜですか?
-
[解決済み] Expressで"? "の後にあるGETパラメータにアクセスするにはどうすればよいですか?
-
[解決済み】Node.jsでBase64エンコードを行うにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】AWS STS AssumeRoleへのアクセスを可能にする方法
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】NPMインストールエラー:解析中の予期せぬJSON入力の終了 '...nt-webpack-plugin": "0'' 付近。
-
[解決済み】POSTできない/expressを使用するとエラーが発生する
-
[解決済み] MongoClient v3.0使用時、db.collectionが関数でない
-
[解決済み] Node.jsのホスト名/IPが証明書のaltnamesと一致しない
-
[解決済み] Heroku "状態が起動から停止に変更されました SIGTERMで全プロセスを停止"
-
[解決済み] エラーです。Cannot find module 'ejs'
-
[解決済み] ノードのバージョンを管理するためのnまたはnvm - 各バージョンのグローバルモジュールを保持することは良いアイデアですか?
-
[解決済み] Mongoose Schema がモデルとして登録されていません。