javascript node.js next () - PullRequest
       1

javascript node.js next ()

136 голосов
/ 22 марта 2011

Я вижу много использования next в node.js.

Что это, откуда оно? Что оно делает? Могу ли я использовать его на стороне клиента?

Извините, например, здесь http://dailyjs.com/2010/12/06/node-tutorial-5/

ищите функцию loadUser.

Ответы [ 3 ]

105 голосов
/ 22 марта 2011

Похоже, что это соглашение о присвоении имен переменных в коде потока управления 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. Это нормальный параметр функции. Он содержит ссылку на следующее выполняемое действие и вызывается после выполнения loadUser (если пользователь не может быть найден).

В этом примере нет ничего особенного в имени next; мы могли бы назвать это как угодно.

35 голосов
/ 22 марта 2011

Это соглашение об именах, используемое при передаче обратных вызовов в ситуациях, которые требуют последовательного выполнения действий, например сканировать каталог -> читать данные файла -> делать что-то с данными. Это предпочтение глубокого вложения обратных вызовов. Первые три раздела следующей статьи в блоге Тима Касвелла HowToNode дают хороший обзор этого:

http://howtonode.org/control-flow

Также см. Раздел Последовательные действия во второй части этой публикации:

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

5 голосов
/ 10 июня 2018

Это в основном как обратный вызов, который express.js использует после того, как определенная часть кода выполнена и выполнена, вы можете использовать его, чтобы убедиться, что часть кода выполнена и что вы хотите делать дальше но всегда помните, что вы можете сделать только один res.send в каждом блоке REST ...

Так что вы можете сделать что-то вроде этого в качестве простого 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);
...