Difference Between app.use() and router.use() in Express
我刚刚阅读Express文档,发现了
我知道
我在这里了解了路由器。 我还在SO上找到类似的问题," express.Router"和使用" app.get"进行路由之间有什么区别?
和app.all(*)和app.use(/)之间的区别,但是它们并不能真正回答我的问题。 谢谢。
1 2 3 4 5 6 7 | 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 函数。 -
如果打开/ first / user,则将调用
bigger 函数。
简而言之,
但是,如果我们改为使用以下内容:
1 2 3 4 5 | app.use('/first', fun); app.get('/sud', bigger); app.get('/user', smaller); |
-
如果您在浏览器中打开/ first,则会调用
fun , -
对于/ sud,将调用
bigger -
对于/ user,将调用
smaller
但是请记住,对于/ first / sud,不会调用任何函数。
此链接也可能有帮助:http://expressjs.com/api.html#router
示例用例可以是一个应用程序,该应用程序具有一个带有标准路由的路由器和一个处理api路由的路由器,这需要有效的用户。
然后,您只能使用
如果您有一个需要所有路径都有效用户的应用程序,请使用
app.use()用于在指定路径上挂载一个或多个中间件函数,当所请求路径的基数与path匹配时执行中间件函数。
router.use()用于中间件功能,默认安装路径为" /"。
但在
app.use(),您将必须指定一个类似的路径:
1 2 | var adsRouter = require('./adsRouter.js'); app.use('/ads', adsRouter); |
要么
1 2 3 4 5 | app.use('/ads', function(req, res, next) { // write your callback code here. }); |
但是在使用router.use()时,您只能提供中间件,如下所示:
1 2 3 4 | router.use(function(req, res, next) { console.log('%s %s %s', req.method, req.url, req.path); next(); }); |
要么
1 2 3 4 | router.use('/test', function(req, res, next) { // write your callback code here. next(); }); |
要么
1 2 3 4 | //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"端点执行下一行。