[解決済み] Node.jsでnext()とreturn next()を使用する場合
2022-04-23 10:39:26
質問
シナリオ : 以下は、あるノード・ウェブ・アプリのコードの一部であるとします。
app.get('/users/:id?', function(req, res, next){
var id = req.params.id;
if (id) {
// do something
} else {
next(); //or return next();
}
});
課題
: どれにしようか迷っているところです。
next()
または
return next()
. 上記のサンプルコードは、どちらのランプでも全く同じように動作し、実行に違いは見られませんでした。
質問
: どのような場合に、どのように使用すればよいのか、どなたか教えてください。
next()
を使用する場合と
return next()
と重要な違いがあるのでしょうか?
どのように解決するのですか?
ある人はいつも
return next()
は、コールバックをトリガーした後に実行が停止することを保証するためのものです。
これをしないと、後で2回目のコールバックが起動する危険があり、通常、壊滅的な結果になります。あなたのコードはそのままでも良いのですが、私なら次のように書き直します。
app.get('/users/:id?', function(req, res, next){
var id = req.params.id;
if(!id)
return next();
// do something
});
インデントレベルも節約できるし、後でコードを読み直したときに、まさかの
next
が2回呼び出されます。
関連
-
[解決済み】「安全なTLS接続が確立される前にクライアントのネットワークソケットが切断されました」(ノード10
-
[解決済み] package.jsonのチルダ(~)とキャレット(^)の違いは何ですか?
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsで終了する方法
-
[解決済み] Node.jsでファイルを書き込む
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Node.jsを完全にアンインストールして、最初から再インストールする方法 (Mac OS X)
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] Node.js上のExpress.jsでGET(クエリ文字列)変数を取得する方法とは?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] リソースの読み込みに失敗しました: net::ERR_CONNECTION_REFUSED : Nodejs
-
[解決済み】「安全なTLS接続が確立される前にクライアントのネットワークソケットが切断されました」(ノード10
-
[解決済み】AWS Lambdaでnodejsの「ref」モジュールを使用すると「invalid ELF header」と表示される件
-
[解決済み】Google spreadsheet api Requestに不十分な認証スコープがあった。
-
[解決済み】モジュール 'internal/util/types' が見つかりません。
-
[解決済み】Passport.js - エラー: ユーザーのセッションへのシリアライズに失敗しました。
-
[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?
-
[解決済み] AWS s3 api error: specified bucket does not exist.
-
[解決済み] Heroku "状態が起動から停止に変更されました SIGTERMで全プロセスを停止"
-
[解決済み] エラー: ノード出力を "|head" にパイプするときに EPIPE を書き込む。