我正在研究两个服务之间的中间件,该中间件将由多个客户端使用。对于给定的路由,客户端将具有需要验证的不同参数。
这是有问题的路线。
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
。