javascript node.js next ()


148

nextNode.js'de çok fazla kullanım görüyorum.

Nedir, nereden geliyor? Bu ne işe yarıyor? İstemci tarafını kullanabilir miyim?

Üzgünüm burada örnek olarak kullanılmıştır: http://dailyjs.com/2010/12/06/node-tutorial-5/

loadUser işlevini arayın.


Bunu hiçbir yerde görmedim ve belgelerin hiçbir yerinde referans verilmiyor. Baktığınız kod tabanında bir yerde tanımlanmadığından emin misiniz?
Samir Talwar

Bu çok belirsiz. Bağlam örneği verebilir misiniz?
Raynos

Yanıtlar:


114

Bu, çalıştırılacak bir sonraki işleve bir başvurunun, tamamlandığında başlaması için bir geri aramaya verildiği Node.js kontrol akış kodunda değişken bir adlandırma kuralı gibi görünüyor.

Örneğin, buradaki kod örneklerine bakın:

Gönderdiğiniz örneğe bakalım:

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İşlev adına bağlı üçüncü bir argüman, bir işlevi bekler next. Bu normal bir işlev parametresidir. Gerçekleştirilecek bir sonraki eyleme referans verir ve bir kez loadUseryapıldığında çağrılır (kullanıcı bulunamadıysa).

nextBu örnekte isimle ilgili özel bir şey yok ; ona herhangi bir ad verebilirdik.


Bu ayrıca express.js'de oldukça fazla kullanılır, ancak değildir .next(). nextBir nesne üzerinde bir yöntem olarak soruyor gibi görünüyor .
Raynos

1
Kullanmak daha iyireturn next();
Ryan Walton

2
@RyanWalton Kabul ediyorum
Wayne

Ben return callback()yerinereturn next()
vijay

39

Seri dizin yürütme gerektiren durumlarda geri aramalar iletilirken kullanılan adlandırma kuralıdır, örneğin dizin tarama -> dosya verilerini oku -> verilerle bir şeyler yapın. Bu, geri çağrıları derinlemesine iç içe yerleştirmeyi tercih eder. Tim Caswell'in HowToNode blogunda yer alan aşağıdaki makalenin ilk üç bölümü buna iyi bir genel bakış sunmaktadır:

http://howtonode.org/control-flow

Ayrıca, bu yayının ikinci bölümünün Sıralı İşlemler bölümüne bakın:

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


1
Bu bağlantılar için çok teşekkürler. Düğümlerle çalışmaya başladığında çok şey açıklıyor
Hassam Abdelillah

Bağlantı şu anda çalışmıyor. Dahili Sunucu Hatası veriyor
Deep Kakkar

1
İnternet arşivinden güncellenen bağlantılar
Pero P.

Bağlantılar için teşekkür ederim, birkaç ay önce Düğüm'ü kullanmaya başladım, ancak kendimi bu uygulamaları kullanarak buluyorum ama tam olarak anlamadım
Charles Smith

8

Temelde, express.js'nin kodun belirli bir bölümü yürütüldükten ve yapıldıktan sonra kullandığı bir geri arama gibidir, kodun bir kısmının yapıldığından ve bir sonraki şeyde ne yapmak istediğinizden emin olmak için kullanabilirsiniz, ancak her zaman yalnızca birini res.sendsenin her DİNLENME bloğu ...

Böylece basit bir next()örnek olarak böyle bir şey yapabilirsiniz :

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

Uygulamanızda bir ara katman yazılımı olmasını istediğinizde de çok kullanışlıdır ...

Ara katman yazılımı işlevini yüklemek için, ara katman yazılımı işlevini belirterek app.use () öğesini çağırın. Örneğin, aşağıdaki kod myLogger ara katman yazılımı işlevini kök yoluna (/) giden yoldan önce yükler.

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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.