web-dev-qa-db-ja.com

javascript node.js next()

Node.jsでnextを多く使用しています。

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

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

loadUser関数を探します。

139
Harry

これは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関数は、名前nextにバインドされている3番目の引数に関数を必要とします。これは通常の関数パラメーターです。実行する次のアクションへの参照を保持し、loadUserが完了すると呼び出されます(ユーザーが見つからない場合を除く)。

この例では、nextという名前について特別なことはありません。私たちはそれを何でも名づけることができました。

106
Wayne Burkett

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

http://howtonode.org/control-flow

その投稿の2番目の部分のSequential Actionsセクションも参照してください。

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

35
Pero P.

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

したがって、簡単な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);
5
Alireza