Difference Between app.use() and router.use() in Express

后端 未结 3 1763
一整个雨季
一整个雨季 2020-12-12 11:12

I was just reading the documentation on express and found these two terms, app.use(); and router.use();

I know app.use(); is u

相关标签:
3条回答
  • 2020-12-12 11:13

    router.get is only for defining subpaths. Consider this example:

    var router = express.Router();
    
    app.use('/first', router); // Mount the router as middleware at path /first
    
    router.get('/sud', smaller);
    
    router.get('/user', bigger);
    
    • If you open /first/sud, then the smaller function will get called.
    • If you open /first/user, then the bigger function will get called.

    In short, app.use('/first', router) mounts the middleware at path /first, then router.get sets the subpath accordingly.


    But if we instead use the following:

    app.use('/first', fun);
    
    app.get('/sud', bigger);
    
    app.get('/user', smaller);
    
    • If you open /first in your browser, fun will get called,
    • For /sud, bigger will get called
    • For /user, smaller will get called

    But remember for /first/sud, no function will get called.

    This link may also help: http://expressjs.com/api.html#router

    0 讨论(0)
  • 2020-12-12 11:15

    router.use(); mounts middleware for the routes served by the specific router, app.use(); mounts middleware for all routes of the app (or those matching the routes specified if you use app.use('/ANYROUTESHERE', yourMiddleware());).

    Example use case could be an app with one router with standard routes and one router that handles api routes, which need a valid user.

    You would then mount the authentication middleware for the api router only with router.use(yourAuthMiddleware());.

    If you would have an app though that requires a valid user for all routes, mount the middleware for the app with app.use(yourAuthMiddleware());

    0 讨论(0)
  • 2020-12-12 11:25

    app.use() used to Mounts the middleware function or functions at the specified path,the middleware function is executed when the base of the requested path matches path.

    router.use() is used to middleware function or functions, The defaults mount path to “/”.

    But in app.use() you will have to give a specified path like that:

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

    or

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

    But while using router.use() you can give only middleware, like this:

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

    or

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

    or

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

    In the above code when the end point is '/admin' then first it will call the authUtil.verifySessionId and authUtil.verifyLisencee then it will execute next line with 'admin' end point and according to controllerIndex.ads.adListingAdmin method.

    0 讨论(0)
提交回复
热议问题