javascript node.js наступний ()


148

Я бачу багато користі nextв node.js.

Що це таке, звідки воно походить? Що це робить? Чи можу я використовувати його на стороні клієнта?

Вибачте, що використовується, наприклад, тут: http://dailyjs.com/2010/12/06/node-tutorial-5/

шукайте функцію loadUser.


Я ніде цього не бачив, і це ніде в документації не посилається. Ви впевнені, що це не визначено десь у кодовій базі, яку ви дивитесь?
Самір Тальвар

Це занадто невиразно. Чи можете ви навести приклад контексту.
Райнос

Відповіді:


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Функція очікує функції в її третій аргумент, який пов'язаний з ім'ям next. Це нормальний параметр функції. Він містить посилання на наступну дію, яку потрібно виконати, і викликається один раз loadUserвиконано (якщо тільки користувача не вдалося знайти).

У nextцьому прикладі немає нічого особливого ; ми могли б це назвати чим завгодно.


Це також використовується в express.js досить багато, але це не так .next(). Він ніби запитує про nextметод як на об'єкті.
Райнос

1
Краще використовуватиreturn next();
Райан Уолтон

2
@RyanWalton Я згоден
Wayne

Я використовував return callback()замістьreturn next()
vijay

39

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

http://howtonode.org/control-flow

Також дивіться розділ Послідовні дії другої частини цієї публікації:

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


1
Дякую за це посилання. Це пояснює багато речей, коли починаєш працювати з nodejs
Хассам Абделілла

Посилання зараз не працює. Це дає внутрішню помилку сервера
Deep Kakkar

1
Оновлені посилання з інтернет-архіву
Перо П.

дякую за посилання, я почав використовувати Node кілька місяців тому, але я вважаю, що я використовую ці практики, але не повністю їх розумію
Чарльз Сміт

8

Це в основному як зворотний виклик, який використовує 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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.