是否可以根据路由模式将中间件应用于路由?

时间:2019-07-08 01:41:58

标签: javascript express

我的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);

表达是否允许基于路由模式配置中间件?

1 个答案:

答案 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