SORU
3 Ocak 2012, Salı


Zor zamanlar 'bir sonraki/sonraki anlamaya çalışıyor yaşıyor()' express.js içinde

Bu bir örnektir:

// Configuration
app.configure(function(){
  app.set('views', __dirname   '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname   '/public'));
});

(vb.)

app.get('/memo', function(req, res) {
  console.log("index");
  Memo.find({}, function(err, data) {
    if(err) return next(err);
    res.render('index', { memos: data });
  });
});

Ve işte bir tane daha

app.get('/memo/list', function(req, res, next) {
  console.log("get memos");
  Memo.find({}, function(err, data) {
    if(err) return next(err);
    res.json(data);
  });
});

simple memo pad built on node alınan

Bu şaşırtıcı bana sorular:

  1. next/next(); tam olarak neye yarıyor? Eğer mevcut değilse ne olur?
  2. Neden ikinci bölümü bir parametre ve bu ilk değil gibi next alıyor?

DÜZENLEME:

CEVAP
3 Ocak 2012, Salı


Express kullanır geri (bir eylem tamamlandığında adlı bu fonksiyonlar) var, ve bu amaç bir sonraki (bu İfade bir sonraki katman yığın tetikleyen bir geri arama) olan fonksiyonlar katman. Tüm Express katman (uyumlu Bağlan) 3 parametreler: istek, yanıt, bir sonraki isteğe bağlı).

Örneğin statik middlware statik dosyaları, POST istekleri alırken bir param için csrf katman kontrolleri ve yolları (yukarıda yapıştırılan ne bunun bir parçası) işleyen yönlendirici katman hizmet vermektedir.

Her katman tam bir görev çağrı next orijinal sıra bazı koşulların sağlanması durumunda (örneğin statik katman bir şeyler ayarlarız bir sonraki katman, çünkü bakacak kendisi için hizmet dosyaları, böylece yönlendirici olmaz denir).

Yönlendirici genellikle son katman yürütülen kıyaslama gibi bir şey istemediğiniz sürece) olma eğilimindedir çünkü next aramıyorsun.

Eğer istediğin oluşturmak için bir katman yalan erişmek için tüm kullanıcılar bu değil mi açmış, olur için arama next() yalnızca kullanıcı oturum (böylece bir sonraki katman adı, yönlendirici bu durumda ve kullanıcı erişim sayfasını arıyor), başka olur muhtemelen onu yönlendirmek için oturum açma sayfası.

next tüm parametreleri ya da parametre olarak bir hata da alır.

Edit: temel yapılandırma yönlendirici önce statik katman, Yani eğer istediğiniz dosyaların servis ihtiyacınız için ilan joker rota çağrıları sonraki() rota değil mi eşleşti:

app.get('*', function (req, res, next) {
  // no route is matched
  // so call next() to pass to the static middleware
  next();
});

Yönlendirici sonra statik dosya sunucusu koymak tavsiye etmiyorum, kendi özel 404 yolları tanımlayabilirsiniz böylece daha önce koymanızı öneriyorum. not:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jesse Pimenta

    Jesse Piment

    5 EKİM 2011
  • Māris Zaharovs

    Māris Zahar

    28 Mayıs 2008
  • PlayStation

    PlayStation

    16 Aralık 2005