如何使快速验证器规则根据快速路由级别上的查询参数而有所不同?

时间:2019-12-19 03:07:25

标签: node.js express express-validator

我正在研究两个服务之间的中间件,该中间件将由多个客户端使用。对于给定的路由,客户端将具有需要验证的不同参数。

这是有问题的路线。

const dataPushController = require('../../controllers/push'),
    clientMiddleware = require('../../middleware/client'),
    { clientValidationRules, validate } = require('../../middleware/validator'),
    express = require('express');

let router = express.Router();

router.use("/:push/:client/contact", clientValidationRules(), validate, clientMiddleware, dataPushController.contact)

middleware / validator.js

const { body, validationResult } = require('express-validator');

const clientValidationRules = function() {
    return [
        body('emailAddress').notEmpty().isEmail(),
        body('customData.store_loc').notEmpty().isString()
    ]
}

const validate = function(req, res, next) {
    const errors = validationResult(req)
    if (errors.isEmpty()) {
        return next()
    }
    const extractedErrors = [];
    errors.array().map(err => extractedErrors.push({ [err.param]: err.msg }))

    return res.status(422).json({
        errors: extractedErrors,
    })
}

module.exports = {
    clientValidationRules,
    validate
}

我想根据clientValidationRules的值来改变req.query.client的收益。我可以通过为每个客户端使用不同版本的路由,然后为每个客户端调用不同的clientValidationRules方法来实现此目的,但是我想避免这种情况,因为我仍然想访问req.query.client

0 个答案:

没有答案