javascript node.js next ()


148

Saya melihat banyak digunakan nextdi node.js.

Apa itu, dari mana asalnya? Apa fungsinya? Bisakah saya menggunakannya sisi klien?

Maaf itu digunakan untuk contoh di sini: http://dailyjs.com/2010/12/06/node-tutorial-5/

cari fungsi loadUser.


Saya belum melihat ini di mana pun, dan itu tidak dirujuk di mana pun dalam dokumentasi. Apakah Anda yakin itu tidak didefinisikan di suatu tempat di basis kode yang Anda lihat?
Samir Talwar

Itu terlalu kabur. Bisakah Anda memberi contoh konteks.
Raynos

Jawaban:


114

Ini tampaknya menjadi konvensi penamaan variabel dalam kode kontrol-aliran Node.js, di mana referensi ke fungsi berikutnya untuk dieksekusi diberikan ke panggilan balik untuk kick-off ketika itu dilakukan.

Lihat, misalnya, contoh kode di sini:

Mari kita lihat contoh yang Anda posting:

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) {
  // ...
});

The loadUserFungsi mengharapkan fungsi dalam argumen ketiga, yang terikat untuk nama next. Ini adalah parameter fungsi normal. Itu memegang referensi ke tindakan berikutnya untuk melakukan dan dipanggil sekali loadUserdilakukan (kecuali pengguna tidak dapat ditemukan).

Tidak ada yang istimewa tentang nama nextdalam contoh ini; kita bisa menamainya apa saja.


Ini juga digunakan cukup banyak di express.js tetapi tidak .next(). Dia tampaknya bertanya tentang nextsebagai metode pada suatu objek.
Raynos

1
Lebih baik digunakanreturn next();
Ryan Walton

2
@RyanWalton Saya setuju
Wayne

Saya menggunakan return callback()bukannyareturn next()
vijay

39

Ini adalah konvensi penamaan yang digunakan ketika meneruskan panggilan balik dalam situasi yang memerlukan eksekusi serial, misalnya memindai direktori -> membaca data file -> melakukan sesuatu dengan data. Ini lebih disukai untuk benar-benar bersarang dalam callback. Tiga bagian pertama dari artikel berikut di blog HowToNode Tim Caswell memberikan gambaran yang baik tentang ini:

http://howtonode.org/control-flow

Lihat juga Tindakan Berurutan dari bagian kedua dari posting itu:

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


1
Terima kasih banyak untuk tautan ini. Ini menjelaskan banyak hal ketika mulai bekerja dengan nodejs
Hassam Abdelillah

Tautan tidak berfungsi sekarang. Ini memberikan Internal Server Error
Deep Kakkar

1
Tautan yang diperbarui dari arsip internet
Pero P.

terima kasih atas tautannya, saya mulai menggunakan Node beberapa bulan yang lalu tetapi saya mendapati diri saya menggunakan praktik-praktik ini tetapi tidak sepenuhnya memahaminya
Charles Smith

8

Ini pada dasarnya seperti panggilan balik yang digunakan express.js setelah bagian tertentu dari kode dieksekusi dan dilakukan, Anda dapat menggunakannya untuk memastikan bahwa bagian dari kode dilakukan dan apa yang ingin Anda lakukan selanjutnya, tetapi selalu waspada Anda hanya dapat lakukan satu res.senddi setiap blok REST Anda ...

Jadi Anda dapat melakukan sesuatu seperti ini sebagai next()contoh sederhana :

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

Ini juga sangat berguna ketika Anda ingin memiliki middleware di aplikasi Anda ...

Untuk memuat fungsi middleware, panggil app.use (), tentukan fungsi middleware. Sebagai contoh, kode berikut memuat fungsi middleware myLogger sebelum rute ke jalur root (/).

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);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.