我有一个带路由器的Express应用程序,以下是路由器的示例:
const router = require('express-promise-router')();
const users = require('./users');
const validate = require('./validate');
router.get('/users', users.list);
router.get('/users/:id', users.get);
// other routes here
module.exports = router;
现在我想添加一个验证每个查询的中间件,就像那样(这不是工作示例,它只是为了表明我想要完成的事情):
const schemas = {
'/users': 'some validation schema',
'/users/:id': 'another validation'
}
module.exports = (req, res, next) => {
const url = req.originalUrl; // This is where I'm stuck.
if (!schemas[url]) {
// throw new error that validation failed
}
// validating somehow
if (!req.validate(schemas[url])) {
// throw new error that validation failed
}
return next();
}
为此,我需要获取中间件安装文件夹(例如'/ users /:id'代表'/ users / 557')。我尝试使用req.originalUrl
,但它返回完整的URL路径而不是mount文件夹。
我怎样才能做到这一点?如果没有办法,我怎样才能以另一种方式编写我的验证中间件以使其工作?