我刚刚阅读了有关快递的文档,并找到了这两个词,app.use();
和router.use();
我知道节点中的app.use();
用于在路径上安装中间件,我们经常在大多数节点应用中使用它。但是router.use();
它们是一样的吗?如果没有,那么差异是什么?
我读过路由器here。我也在SO What is the difference between "express.Router" and routing using "app.get"?上发现了类似的问题 和Difference between app.all('*') and app.use('/'),但他们并没有真正回答我的问题。感谢。
答案 0 :(得分:88)
router.get
仅用于定义子路径。考虑这个例子:
var router = express.Router();
app.use('/first', router); // Mount the router as middleware at path /first
router.get('/sud', smaller);
router.get('/user', bigger);
smaller
函数。 bigger
函数。 简而言之,app.use('/first', router)
在路径 / first 上安装中间件,然后router.get
相应地设置子路径。
但如果我们改为使用以下内容:
app.use('/first', fun);
app.get('/sud', bigger);
app.get('/user', smaller);
fun
,bigger
将被调用smaller
将被调用但请记住 / first / sud ,不会调用任何函数。
此链接也可能有所帮助:http://expressjs.com/api.html#router
答案 1 :(得分:58)
router.use();
为特定路由器所服务的路由安装中间件,app.use();
为应用的所有路由(或者使用app.use('/ANYROUTESHERE', yourMiddleware());
时匹配指定路由的中间件)安装中间件。
示例用例可以是具有一个具有标准路由的路由器和一个处理api路由的路由器的app,其需要有效用户。
然后,您只能使用router.use(yourAuthMiddleware());
为api路由器安装身份验证中间件。
如果你有一个应用程序虽然需要所有路由的有效用户,请使用app.use(yourAuthMiddleware());
答案 2 :(得分:1)
app.use()用于在指定路径上安装中间件函数或函数,当请求路径的基数与路径匹配时,执行中间件函数。
router.use()用于中间件功能或函数,默认安装路径为“/".
但是在 app.use()你必须给出一个类似的指定路径:
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,然后它将执行下一行'admin'结束点并根据controllerIndex.ads .adListingAdmin方法。