我的Express应用程序具有以下路线。
router.route('/login').post(userCtrl.login);
router.route('/users').get(userCtrl.getAll);
router.route('/users/count').get(userCtrl.count);
router.route('/user').post(userCtrl.insert);
router.route('/user/:id').get(userCtrl.get);
router.route('/user/:id').put(userCtrl.update);
router.route('/user/:id').delete(userCtrl.delete);
我想将中间件应用于以'/ user'开头的所有路由。
例如我有一个中间件checkAuth
,我想将其应用于任何与用户相关的路由,而不是/login
的路由。
我试图添加下面的代码,但是不起作用。
router.use("/user.*", checkAuth);
表达是否允许基于路由模式配置中间件?
答案 0 :(得分:2)
在Express中,您可以将app.use()
或router.use()
与以下路径一起使用:
router.use("/user", function(req, res, next) {
console.log(req.url);
next();
});
这将为第一个路径段为“ / user”的任何URL调用此中间件。这将包括所有这些:
/user
/user?foo=2
/user/something
/user/1/2
如果您要匹配以/ user开头的任何网址,则可以使用Express通配符,如下所示:
router.use("/user*", function(req, res, next) {
console.log(req.url);
next();
});
这将符合以上所有条件,但也符合以下条件:
/users
/users/something
/usersxyz