Express'te app.use () ve router.use () arasındaki fark


92

Açıklamayla ilgili belgeleri okuyordum ve bu iki terimi buldum app.use();verouter.use();

Bir yola bir ara yazılım eklemekapp.use(); için düğümde kullanıldığını biliyorum ve bunu çoğu düğüm uygulamasında sıklıkla kullanıyoruz. ama ikisi de aynı nedir? değilse, ne fark eder?router.use();

Burada yönlendirici hakkında okudum . SO'da da benzer sorular buldum "express.Router" ile "app.get" kullanarak yönlendirme arasındaki fark nedir? ve app.all ('*') ve app.use ('/') arasındaki fark , ancak sorumu gerçekten cevaplamıyorlar. Teşekkürler.

Yanıtlar:


126

router.getyalnızca alt yolları tanımlamak içindir. Şu örneği düşünün:

var router = express.Router();

app.use('/first', router); // Mount the router as middleware at path /first

router.get('/sud', smaller);

router.get('/user', bigger);
  • / First / sud'ı açarsanız , smallerişlev çağrılacaktır.
  • / First / user'ı açarsanız , biggerişlev çağrılacaktır.

Kısacası, app.use('/first', router)ara yazılımı yola / ilk olarak bağlar , ardından router.getalt yolu buna göre ayarlar.


Ancak bunun yerine aşağıdakileri kullanırsak:

app.use('/first', fun);

app.get('/sud', bigger);

app.get('/user', smaller);
  • Tarayıcınızda / ilk açarsanız funaranır,
  • İçin / sud , biggerçağrılacaktır,
  • İçin / kullanıcı , smallerçağrılacaktır,

Ama / first / sud için hatırlayın , hiçbir işlev çağrılmayacaktır.

Bu bağlantı ayrıca yardımcı olabilir: http://expressjs.com/api.html#router


Cevabımı düzenledim @NaeemShaikh, lütfen yeniden bak.
Sudhanshu Gaur

4
Ama app.use ('/ first / sud', daha küçük) gidebildiğinizde neden yönlendiriciyi kullanmalısınız; ve app.use ('/ ilk / kullanıcı', daha büyük)? Demek istediğim, yönlendirici yarattılar, böylece ilk parametrede fazladan şeyler yazmamız gerekmeyecek mi?
mskw

güzel soru bak, doğru bilmiyorum ama bence bu aslında url'lerde yönlendirme yapmak için yapıldı, burada app.use ara yazılım için yapıldı, şimdi app.use ('/ first / sud', daha küçük) kullanabilirsiniz; ancak uygulamanızda / birinci / ikinci / üçüncü / dördüncü olarak başlayan birçok rotanız olduğunu varsayalım, şimdi her rotayı burada / birinci / ikinci / üçüncü / dördüncü / x olarak yaparsınız, hayır burada yönlendiriciyi kullanacaksınız, her ikisinin de harika çalıştığını hatırlayın yönlendirici sadece bu url'ler için yapıldı
Sudhanshu Gaur

Yani, kullanarak yuvalama yapamayız router. Sadece yapabiliriz app. Bu doğru mu?
Mr_Perfect

1
OP neden soruyor router.useama bu cevap referans olarak yanıt veriyor router.get?
Tim Heilman

74

router.use();belirli yönlendirici tarafından sunulan yollar için ara yazılım app.use();bağlar, uygulamanın tüm yolları için ara yazılım bağlar (veya kullanıyorsanız belirtilen yollarla eşleşenleri)app.use('/ANYROUTESHERE', yourMiddleware()); .

Örnek kullanım örneği, standart yollara sahip bir yönlendiriciye ve geçerli bir kullanıcıya ihtiyaç duyan api yollarını işleyen bir yönlendiriciye sahip bir uygulama olabilir.

Daha sonra, API yönlendiricisi için kimlik doğrulama ara yazılımını yalnızca router.use(yourAuthMiddleware()); .

Tüm rotalar için geçerli bir kullanıcı gerektiren bir uygulamanız varsa, uygulama için ara yazılımı şu şekilde bağlayın: app.use(yourAuthMiddleware());


Yeni bir yönlendirici ve ardından usebaşka bir yönlendiricide oluşturabilir miyim ? Beğenrouter1.use('/path', router2);
CodyBugstein

6
Bu cevap açıktır ve kabul edilen cevap olmalıdır. Yönlendirici genellikle uygulamanın daha uygun olacağı yerlerde kötüye kullanılır.
AturSams

1

app.use () kullanılan ara yazılım işlevini veya işlevlerini belirtilen yola bağlar, ara yazılım işlevi, istenen yolun tabanı yolla eşleştiğinde yürütülür.

router.use (), ara yazılım işlevi veya işlevleri için kullanılır, Varsayılanlar "/" dizinine yol açar.

Ancak app.use () 'de aşağıdaki gibi belirli bir yol vermeniz gerekecek:

 var adsRouter = require('./adsRouter.js');
    app.use('/ads', adsRouter);

veya

app.use('/ads', function(req, res, next) {

  // write your callback code here.

    });

Ancak router.use () kullanırken yalnızca aşağıdaki gibi bir ara yazılım verebilirsiniz:

router.use(function(req, res, next) {
  console.log('%s %s %s', req.method, req.url, req.path);
  next();
});

veya

router.use('/test', function(req, res, next) {
  // write your callback code here.
  next();
});

veya

//in router.js

router.use('/admin', authUtil.verifySessionId, authUtil.verifyLisencee);
router.post('/admin', controllerIndex.ads.adListingAdmin);

Yukarıdaki kodda, bitiş noktası '/ admin' olduğunda ilk önce authUtil.verifySessionId ve authUtil.verifyLisencee'yi çağıracak ve ardından sonraki satırı 'admin' uç noktasıyla ve controllerIndex.ads.adListingAdmin yöntemine göre çalıştıracaktır.


1
app.useUygulamaya yapılan her istek için işlevi yürütmek istiyorsanız , bir yol sağlanmasına gerek yoktur .
jacefarm

@shubham Çok iyi anlattın ve bana çok yardımcı oldu. Ara yazılım içeren bir yönlendirici olması durumunda, bunu router.delete ("/: id / delete", middleware.checkToken, userController.deleteUser)
Sourabh Bhutani
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.