web-dev-qa-db-fra.com

Différence entre app.use () et router.use () dans Express

Je venais de lire la documentation sur express et j'ai trouvé ces deux termes, app.use(); et router.use();

Je sais que app.use(); est utilisé dans le noeud pour Monter un middleware sur un chemin, et nous l'utilisons souvent dans la plupart des applications de noeud. . mais qu'est-ce que router.use(); sont-ils identiques? Si non, quelle est la différence?

J'ai lu sur le routeur ici . J'ai également trouvé des questions similaires sur SO Quelle est la différence entre "express.Router" et le routage à l'aide de "app.get"? et Différence entre les applications .all ('*') et app.use ('/') , mais ils ne répondent pas vraiment à ma question. Merci.

68
Naeem Shaikh

router.get Sert uniquement à définir des sous-chemins. Considérons cet exemple:

var router = express.Router();

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

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

router.get('/user', bigger);
  • Si vous ouvrez /first/sud , la fonction smaller sera appelée.
  • Si vous ouvrez /first/user , la fonction bigger sera appelée.

En bref, app.use('/first', router) monte le middleware sur chemin /first , puis router.get Définit le sous-chemin en conséquence.


Mais si nous utilisons plutôt les éléments suivants:

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

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

app.get('/user', smaller);
  • Si vous ouvrez /first dans votre navigateur, fun sera appelé,
  • Pour /sud , bigger sera appelé
  • Pour /utilisateur , smaller sera appelé

Mais rappelez-vous pour /first/sud , aucune fonction ne sera appelée.

Ce lien peut également aider: http://expressjs.com/api.html#router

91
Sudhanshu Gaur

router.use(); monte le middleware pour les routes servies par le routeur spécifique, app.use(); monte le middleware pour toutes les routes de l'application (ou celles correspondant aux routes spécifiées si vous utilisez app.use('/ANYROUTESHERE', yourMiddleware()); ).

Un exemple d'utilisation peut être une application avec un routeur avec des routes standard et un routeur qui gère les routes api, qui nécessitent un utilisateur valide.

Vous pouvez alors monter le middleware d'authentification pour le routeur api uniquement avec router.use(yourAuthMiddleware());.

Si vous avez une application qui nécessite un utilisateur valide pour toutes les routes, montez le middleware pour l'application avec app.use(yourAuthMiddleware());

59
Laura

app.use () utilisé pour monter la ou les fonctions de middleware sur le chemin spécifié. La fonction de middleware est exécutée lorsque la base du chemin demandé correspond au chemin.

router.use () est utilisé pour la ou les fonctions de middleware, le chemin de montage par défaut vers "/".

Mais dans app.use (), vous devrez donner un chemin spécifique comme celui-ci:

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

ou

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

  // write your callback code here.

    });

Mais en utilisant router.use (), vous ne pouvez donner qu'un middleware, comme ceci:

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

ou

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

ou

//in router.js

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

Dans le code ci-dessus, lorsque le point final est '/ admin', il appellera d'abord authUtil.verifySessionId et authUtil.verifyLisencee, puis il exécutera la ligne suivante avec le point final 'admin' et selon controllerIndex.ads.adListingAdmin méthode.

1
Shubham Verma