169

シナリオ: 以下は、ノード Web アプリのコードの一部であると考えてください。

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()か、および重要な違いについて、誰かがこれに光を当てることができますか?

4

6 に答える 6

183

return next()コールバックをトリガーした後に実行が確実に停止するようにすることを常に書いている人もいます。

そうしないと、後でコールバックをもう一度トリガーするリスクがあり、通常は壊滅的な結果になります。あなたのコードはそのままで問題ありませんが、次のように書き直します。

app.get('/users/:id?', function(req, res, next){
    var id = req.params.id;

    if(!id)
        return next();

    // do something
});

これによりインデント レベルが節約され、後でコードをもう一度読んだときに、 がnext2 回呼び出されることはないと確信しています。

于 2013-05-29T10:53:14.233 に答える