0

我正在使用express-validator并希望根据请求正文中的值进行不同的检查。

我为此创建了一个函数,但我没有收到任何回复(即快递只是挂起。):

验证/profile.js

module.exports = function (req,res,next) {
    if (req.body.type == 'teacher') {
        return check('name').exists().withMessage('Name is required'),
    } else {
        return check('student_id').exists().withMessage('Student id is required'),
    }
}

应用程序.js

router.put('/', require('./validation/profile'), (req, res, next) => {
    const errors = validationResult(req).formatWith(errorFormatter)
    if (!errors.isEmpty()) {
        return res.status(422).json({ errors: errors.mapped() })
    } else {
        res.send(req.user)
    }  
})

但是,如果我将函数编写为普通函数(而不是具有 3 个参数的中间件)并调用它,则一切正常。但是这样,我将无法访问请求对象。我必须对参数进行“硬编码”。

验证/profile.js

module.exports = function (type) {
    if (type == 'teacher') {
        return check('name').exists().withMessage('Name is required'),
    } else {
        return check('student_id').exists().withMessage('Student id is required'),
    }
}

应用程序.js

router.put('/', require('./validation/profile')('teacher'), (req, res, next) => {
    const errors = validationResult(req).formatWith(errorFormatter)
    if (!errors.isEmpty()) {
        return res.status(422).json({ errors: errors.mapped() })
    } else {
        res.send(req.user)
    }  
})

关于如何根据请求正文中的值进行不同检查的任何建议?

4

1 回答 1

1

express-validator check API创建中间件,你应该直接附加到 express 或者像 express 那样自己调用它。

// Use routers so multiple checks can be attached to them.

const teacherChecks = express.Router();
teacherChecks.use(check('name').exists().withMessage('Name is required'));

const studentChecks = express.Router();
studentChecks .use(check('student_id').exists().withMessage('Student id is required'));

module.exports = function (req,res,next) {
    if (req.body.type == 'teacher') {
        teacherChecks(req, res, next);
    } else {
        studentChecks(req, res, next);
    }
}

你也可以潜在地oneOf用来做同样的事情。

router.put('/', oneOf([
    check('name').exists().withMessage('Name is required'),
    check('student_id').exists().withMessage('Student id is required')
], 'Invalid request body'), (req, res, next) => {
    const errors = validationResult(req).formatWith(errorFormatter)
    if (
        !errors.isEmpty()
    ) {
        return res.status(422).json({errors: errors.mapped()})
    }
    else {
        res.send(req.user)
    }
});
于 2018-07-25T19:05:55.177 回答