Я спрашиваю об этом, потому что это второй раз, когда я сталкиваюсь с проблемой, когда мне нужно рассмотреть две независимые цепочки проверки в одном поле, которые обе могут привести к правильным результатам, и если я хочу рассмотреть другую цепочку (чтобы скажем, ветвь) в зависимости от сбоя первой примененной цепочки, ошибки предыдущих проверок уже находятся в массиве, но я хочу начать, так сказать, с нуля, с нуля ...
// validate field as username
const username = {
pattern: /^[a-zA-Z0-9]*$/,
minLength: 6,
maxLength: 20,
},
const validateUsername = (fieldname) => body(fieldname)
.isString().withMessage(`${fieldname} must be string!`)
.trim()
.isLength({ min: username.minLength, max: username.maxLength }).withMessage(`${fieldname} must be of length{ min: ${username.minLength}, max: ${username.maxLength} }!`)
.matches(username.pattern).withMessage(`${fieldname} must match pattern: ${username.pattern}`)
// validate field as email
const validateEmail = (fieldname) => body(fieldname)
.isString().withMessage(`${fieldname} must be string`)
.trim()
.isEmail().withMessage(`not valid email provided!`)
const loginValidationMiddleware = body('login')
.custom(async (value, { req }) => {
let chain
chain = await validateEmail('login').run(req)
if(!chain.context._errors.length) {
// validate something if it is email
return
}
chain._errors = []
chain = await validateUsername('login').run(req)
if(!chain.context._errors.length) {
// validate something if it is username
return
}
throw new Error('login must contain valid "email" or "username"')
})
Может быть, не совсем ясно, что нужно очищать ошибки, но, основываясь на опыте моего последнего проекта, где я использую эту способность много раз, я хочу знать, правильное ли это решение, или, может быть, мне нужно пропустить этот шаблон?