SORU
22 Mayıs 2012, Salı


node.js Express()bir sonraki

Express'in, bu gibi basit bir kod bloğu var:

app.get('/', function(req, res){
    res.send('Hello World');
});

'/', Bu kod işlevi ger gönderiliyor ve res nesneler. istek üzerine

Kodu bazı diğer engeller, bir sonraki olmak 3. bir argüman gibi görünüyor()

Express belgelere çekti

app.get('/users/:id?', function(req, res, next){
    var id = req.params.id;
    if (id) {
        // do something
    } else {
        next();
    }
});

Bu nokta ne anlamıyorum() bir sonraki veya bir varlık neden kullanılır. Bu örnekte, eğer kimliği yok eğer doğru değilse, bir sonraki aslında ne yapıyor?

CEVAP
22 Mayıs 2012, Salı


Bir sonraki kontrol geçereşleşenrota. Mesela verdiğiniz örnekte, id verildi req.user atamak eğer veritabanında kullanıcı aramak isteyebilirsiniz.

Aşağıda, bir yol gibi olabilir:

app.get('/users', function(req, res) {
  // check for and maybe do something with req.user
});

/123 /kullanıcılar örnek rota ilk maç olacak bu yana, ilk kontrol edin ve 123; /users bunun sonucu ile bir şeyler yapabilir kullanıcı bulacaksınız.

Route middleware (NOT: 2'ye bağlayın.x belgelere, ama bu 3 çalışan olarak test edilmiştir.x) belirli bir URİ düzeni veya bir rota sipariş güveniyor olmadığından daha esnek ve güçlü bir araç olsa da, benim görüşüme göre, bir. Örnek bu şekilde gösterilen model meyilli, bir zaman uyumsuz findOne() 12 *model varsayarak olurdum:

function loadUser(req, res, next) {
  if (req.params.userId) {
    Users.findOne({ id: req.params.userId }, function(err, user) {
      if (err) {
        return next(new Error("Couldn't find user: "   err));
      }

      req.user = user;
      next();
    });
  } else {
    next();
  }
}

// ...

app.get('/user/:userId', loadUser, function(req, res) {
  // do something with req.user
});

app.get('/users/:userId?', loadUser, function(req, res) {
  // if req.user was set, it's because userId was specified (and we found the user).
});

// Pretend there's a "loadItem()" which operates similarly, but with itemId.
app.get('/item/:itemId/addTo/:userId', loadItem, loadUser, function(req, res) {
  req.user.items.append(req.item.name);
});

Bu gibi akışını kontrol etmek için güçlü olmak çok kullanışlı. Bazı sayfalar sadece admin bayrağı kullanıcılar için kullanılabilir olmasını isteyebilirsiniz:

/**
 * Only allows the page to be accessed if the user is an admin.
 * Requires use of `loadUser` middleware.
 */
function requireAdmin(req, res, next) {
  if (!req.user || !req.user.admin) {
    return next(new Error("Permission denied."));
  }

  next();
}

app.get('/top/secret', loadUser, requireAdmin, function(req, res) {
  res.send('blahblahblah');
});

Bu size bazı fikirler verdi umuyoruz.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Abe Olandres

    Abe Olandres

    16 EYLÜL 2006
  • GWTLecturer

    GWTLecturer

    18 EKİM 2012
  • Pocketnow

    Pocketnow

    14 EKİM 2007