javascript node.js next()


148

nextnode.jsで多くの使用が見られます。

それは何ですか、それはどこから来ましたか?それは何をするためのものか?クライアント側で使用できますか?

申し訳ありませんが、ここでは例として使用されています:http : //dailyjs.com/2010/12/06/node-tutorial-5/

loadUser関数を探します。


私はこれをどこにも見たことがなく、ドキュメントのどこにも参照されていません。あなたが見ているコードベースのどこかにそれが定義されていないことを確信していますか?
Samir Talwar 2011年

それはあまりにもあいまいです。コンテキストの例を挙げてください。
レイノス

回答:


114

これは、Node.js制御フローコードの変数命名規則のようです。そこでは、実行する次の関数への参照がコールバックに渡され、実行が開始されます。

たとえば、次のコードサンプルをご覧ください。

投稿した例を見てみましょう:

function loadUser(req, res, next) {
  if (req.session.user_id) {
    User.findById(req.session.user_id, function(user) {
      if (user) {
        req.currentUser = user;
        return next();
      } else {
        res.redirect('/sessions/new');
      }
    });
  } else {
    res.redirect('/sessions/new');
  }
}

app.get('/documents.:format?', loadUser, function(req, res) {
  // ...
});

loadUser関数は、名前にバインドされている3番目の引数、関数を期待しますnext。これは通常の関数パラメーターです。これは、次に実行するアクションへの参照を保持し、loadUser(ユーザーが見つからない場合を除いて)一度実行されると呼び出されます。

nextこの例では、名前に特別なものはありません。なんでも名前を付けることができました。


これは、express.jsでもかなり使用されていますが、そうではありません.next()。彼はnextオブジェクトのメソッドとして尋ねるようです。
レイノス

1
使いやすさreturn next();
Ryan Walton

2
@RyanWalton同意します
ウェイン、

return callback()代わりに使用しましたreturn next()
vijay

39

これは、アクションのシリアル実行が必要な状況でコールバックを渡すときに使用される命名規則です。たとえば、ディレクトリのスキャン->ファイルデータの読み取り->データで何かを行います。これは、コールバックを深くネストすることを優先します。Tim CaswellのHowToNodeブログに関する次の記事の最初の3つのセクションでは、これについての概要を説明しています。

http://howtonode.org/control-flow

その投稿の2番目の部分の「順次アクション」セクションも参照してください。

http://howtonode.org/control-flow-part-ii


1
このリンクをありがとう。nodejsの使用を開始するときに多くのことを説明しています
Hassam Abdelillah

リンクは現在機能していません。内部サーバーエラーが発生しています
Deep Kakkar

1
インターネットアーカイブからのリンクの更新
Pero P.

リンクをありがとう、私は数か月前にNodeを使い始めましたが、私はこれらのプラクティスを使用していますが、完全には理解していません
Charles Smith

8

これは基本的に、コードの特定の部分が実行されて完了した後にexpress.jsが使用するコールバックのようなものです。これを使用して、コードの一部が完了したことと、次に行うことを確認できますが、常にできることだけに注意してくださいres.sendRESTブロックで1つ実行してください...

したがって、簡単なnext()例として次のようなことができます。

app.get("/", (req, res, next) => {
  console.log("req:", req, "res:", res);
  res.send(["data": "whatever"]);
  next();
},(req, res) =>
  console.log("it's all done!");
);

アプリにミドルウェアが必要な場合にも非常に便利です...

ミドルウェア関数をロードするには、ミドルウェア関数を指定してapp.use()を呼び出します。たとえば、次のコードはルートパス(/)へのルートの前にmyLoggerミドルウェア関数をロードします。

var express = require('express');
var app = express();

var myLogger = function (req, res, next) {
  console.log('LOGGED');
  next();
}

app.use(myLogger);

app.get('/', function (req, res) {
  res.send('Hello World!');
})

app.listen(3000);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.