从Express

时间:2018-02-01 10:25:35

标签: javascript node.js validation express

我有一个带路由器的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文件夹。

我怎样才能做到这一点?如果没有办法,我怎样才能以另一种方式编写我的验证中间件以使其工作?

1 个答案:

答案 0 :(得分:1)

req.route 内,您将获得API的路径。

Check this screenshot