Express中的app.use()和router.use()之间的区别
我只是在快速阅读文档,发现这两个术语, app.use();
和router.use();
我知道app.use();
在节点中用于在一个path上挂载中间件 ,我们经常在大多数节点应用程序中使用它。 但是什么是router.use();
他们都一样吗? 如果不是,有什么区别?
我在这里读了关于路由器。 我也在SO上发现了类似的问题。 “express.Router”和使用“app.get”的路由之间有什么区别? 和app.all('*')和app.use('/')之间的区别 ,但是他们并没有真正回答我的问题。 谢谢。
router.get
仅用于定义子path。 考虑这个例子:
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 ,则会调用smaller
函数。 如果你打开第一个/用户 ,那么bigger
将被调用。 简而言之,app.use('/ first',路由器)将中间件安装在path / first处 ,然后router.get
设置子path。
但是如果我们改用:
app.use('/first', fun); app.get('/sud', bigger); app.get('/user', smaller);
现在,如果您打开/首先在您的浏览器,然后fun
将被称为和/ sud , bigger
将被称为和/用户 , smaller
function将被调用。 …但请记住/ first / sud ,没有函数会被调用。
此链接也可能有所帮助: http : //expressjs.com/api.html#router
router.use();
装载由特定路由器服务的路由的中间件app.use();
为应用程序的所有path装载中间件(或与使用app.use('/ANYROUTESHERE', yourMiddleware());
指定的路由相匹配的中间件)。
示例用例可以是一个具有标准路由的路由器和一个处理api路由的路由器的应用,这需要有效的用户。
然后,您只能使用router.use(yourAuthMiddleware());
装载api路由器的身份validation中间件router.use(yourAuthMiddleware());
。
如果你有一个应用程序,虽然这需要一个有效的用户的所有路线,与app.use(yourAuthMiddleware());
安装应用程序的中间件app.use(yourAuthMiddleware());
app.use()用于在指定的path上安装中间件function或中间件function,当请求的path的基础匹配path时,中间件function被执行。
router.use()用于中间件function或者function,缺省情况下将path挂载到“/”。
但是在app.use()中,你必须给出一个指定的path:
var adsRouter = require('./adsRouter.js'); app.use('/ads', adsRouter);
要么
app.use('/ads', function(req, res, next) { // write your callback code here. });
但是在使用router.use()的时候,你只能给中间件,像这样:
router.use(function(req, res, next) { console.log('%s %s %s', req.method, req.url, req.path); next(); });
要么
router.use('/test', function(req, res, next) { // write your callback code here. next(); });
要么
//in router.js router.use('/admin', authUtil.verifySessionId, authUtil.verifyLisencee); router.post('/admin', controllerIndex.ads.adListingAdmin);
在上面的代码中,当结束点是'/ admin'时,首先调用authUtil.verifySessionId和authUtil.verifyLisencee,然后根据controllerIndex.ads.adListingAdmin方法执行下一行'admin'结束点。