Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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

I know app.use(); is used in node for Mounting a middleware at a path, and we often use it in most of the node apps. but what is router.use(); are they both same? if not, whats the difference ?

I read about router here. I also found similar questions on SO What is the difference between "express.Router" and routing using "app.get"? and Difference between app.all('*') and app.use('/'), but they do not really answer my question. Thanks.

like image 373
Naeem Shaikh Avatar asked Dec 01 '14 11:12

Naeem Shaikh


People also ask

What is difference between app and router in Express?

Router class can be used to create modular mountable route handlers. A Router instance is a complete middleware and routing system; for this reason it is often referred to as a "mini-app"." Possible duplicate of What is the difference between "express. Router" and routing using "app.

What is router () in Express?

The express. Router() function is used to create a new router object. This function is used when you want to create a new router object in your program to handle requests. Multiple requests can be easily differentiated with the help of the Router() function in Express. js.

What is app use () in Express?

The app. use() method mounts or puts the specified middleware functions at the specified path. This middleware function will be executed only when the base of the requested path matches the defined path.

What is the difference between app use and app all?

app. use only see whether url starts with specified path;app. all will match complete path.


1 Answers

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

like image 100
Sudhanshu Gaur Avatar answered Oct 10 '22 19:10

Sudhanshu Gaur