长话短说,我有一个相当奇怪的路由场景,我需要在调用参数中间件之前调用中间件:
router.param('foo', function (req, res, next, param) {
// Get the param value
...
next()
})
router.route('/:foo')
.all(function (req, res, next) {
// I want to run this before the router.param middleware
// but I don't want to run this on /:foo/bar
...
next()
})
.get(function (req, res, next) {
// Run this after the router.param middleware
...
res.send('foo')
})
router.route('/:foo/bar')
.get(function (req, res, next) {
// Run this after the router.param middleware
...
res.send('bar')
})
现在,我理解为什么param中间件通常先运行,但有没有办法解决这个问题?
我尝试使用router.use
而没有这样的路径:
router.use(function (req, res, next) {
// I want to run this before the router.param middleware
// but I don't want to run this on /:foo/bar
...
next()
})
...并在router.param中间件之前调用它,但之后也会为/:foo/bar
调用它。
最后,如果我使用router.use
和这样的路径:
router.use('/:foo', function (req, res, next) {
// I want to run this before the router.param middleware
// but I don't want to run this on /:foo/bar
...
next()
})
...首先调用router.param中间件(正如您所期望的那样)。
有办法做到这一点吗?
答案 0 :(得分:1)
我绝不是正则表达式的专家,但您可以使用正则表达式来匹配路线。这适用于您的特定用例,尽管可能有更好的方法。
router.use(/^\/[^\/]*$/, function(req, res, next) {
});