2013-06-15 32 views
25

Ekspres katman: app.use ve app.all

app.use('/some/path', function(req, res, next() {})

ve

app.all('/some/path', function(req, res, next() {})

Onlar/bazı/yolu için denilen olsun hem katman fonksiyonları arasında bir fark var mı sadece talepler, değil mi?

+1

http://stackoverflow.com/questions/14125997/difference-between-app-all-and-app-use dosyasının kopyası –

cevap

22

Bu iki örnek arasında büyük fark vardır. app.use ile kaydedilen işlevler genel ara katman işlevleridir ve genellikle app.configure işlevinin içinde, ara katman yığındaki konumlarına uygun olarak adlandırılır. Bu tür katman yazılımları, hata işleme işlevleri haricindeapp.route'dan önce yerine yerleştirilir. Öte yandan app.all üzerinde

her HTTP yöntemlerini kapsar ve app.route içinde sadece olarak adlandırılır (Genellikle katman olarak da adlandırılır), bir yönlendirme fonksiyonudur. Önceki yönlendirici işlevinizden herhangi biri /some/path ile eşleşiyorsa ve next geri arama çağrısı yapılmadıysa, app.all yürütülmeyecektir, bu nedenle app.all işlevleri genellikle yönlendirme bloğunuzun başlangıcındadır.

Ayrıca, yönlendirme işlevlerinizde kullanılan üçüncü türdeki orta yazılımlar da vardır, örn. typicaly erişimi sınırlama veya /some/path yol ile ilgili genel görevleri gerçekleştirmek için kullanılan

app.get('/some/path', middleware1, middleware2, function(req, res, next) {}); 

.

Pratik uygulama için her iki işlevi de kullanabilirsiniz, ancak app.use'u /some/path ile kullanırken davranıştaki farklılığa dikkat edin. app.get'dan farklı olarak, app.use, anonim işlevi çağrılmadan önce yoldan /some/path şeritlerini keser.

Daha fazla bilgiyi express belgelerinde bulabilirsiniz.

+0

Teşekkür ederiz! Harika bir açıklama. – jamiltz

+0

@jamiltz - Lütfen bunu cevap olarak işaretleyin. –

+5

Bu, Express 3 için geçerlidir, ancak Express 4 bunu biraz farklı işler ve şimdi daha yakındır. –