快速验证器主体条件验证(参数)
express-validator body conditional validation (param)
我有一条快速路线,我想将它用于三种不同的情况。逻辑是一样的,只是做了一些小的修改,所以我不想创建单独的端点。我使用参数 'type' 来区分大小写。
问题是我只想在参数 type 等于 'twoemails' 时使用第二个验证器,而我不这样做不知道该怎么做。我尝试使用 oneOf & anyOf 但它似乎没有用。谢谢!
myRoute.post('/myendpoint/:type',
param('type', 'Invalid type').isIn(['oneemail', '**twoemails**']),
body('email1', 'first email invalid').isEmail(),
body('email2', 'second email invalid').isEmail(),
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({
errors: errors.array(),
});
}
...
您可以将 body('email2', 'second email invalid').isEmail()
替换为:
body('email2')
.if(param('type').equals('twoemails'))
.isEmail()
.withMessage('second email invalid')
如果类型设置为 twoemails,它只会验证第二封电子邮件。这取决于你的参数行是这样的,没有 *s.
param('type', 'Invalid type').isIn(['oneemail', 'twoemails'])
所以整个解决方案
myRoute.post('/myendpoint/:type',
param('type', 'Invalid type').isIn(['oneemail', 'twoemails']),
body('email1', 'first email invalid').isEmail(),
body('email2')
.if(param('type').equals('twoemails'))
.isEmail()
.withMessage('second email invalid'),
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({
errors: errors.array(),
});
}
...
我有一条快速路线,我想将它用于三种不同的情况。逻辑是一样的,只是做了一些小的修改,所以我不想创建单独的端点。我使用参数 'type' 来区分大小写。
问题是我只想在参数 type 等于 'twoemails' 时使用第二个验证器,而我不这样做不知道该怎么做。我尝试使用 oneOf & anyOf 但它似乎没有用。谢谢!
myRoute.post('/myendpoint/:type',
param('type', 'Invalid type').isIn(['oneemail', '**twoemails**']),
body('email1', 'first email invalid').isEmail(),
body('email2', 'second email invalid').isEmail(),
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({
errors: errors.array(),
});
}
...
您可以将 body('email2', 'second email invalid').isEmail()
替换为:
body('email2')
.if(param('type').equals('twoemails'))
.isEmail()
.withMessage('second email invalid')
如果类型设置为 twoemails,它只会验证第二封电子邮件。这取决于你的参数行是这样的,没有 *s.
param('type', 'Invalid type').isIn(['oneemail', 'twoemails'])
所以整个解决方案
myRoute.post('/myendpoint/:type',
param('type', 'Invalid type').isIn(['oneemail', 'twoemails']),
body('email1', 'first email invalid').isEmail(),
body('email2')
.if(param('type').equals('twoemails'))
.isEmail()
.withMessage('second email invalid'),
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({
errors: errors.array(),
});
}
...