Будет ли правильно, если я очищу вручную массив ошибок "express -validator"? - PullRequest
0 голосов
/ 10 июля 2020

Я спрашиваю об этом, потому что это второй раз, когда я сталкиваюсь с проблемой, когда мне нужно рассмотреть две независимые цепочки проверки в одном поле, которые обе могут привести к правильным результатам, и если я хочу рассмотреть другую цепочку (чтобы скажем, ветвь) в зависимости от сбоя первой примененной цепочки, ошибки предыдущих проверок уже находятся в массиве, но я хочу начать, так сказать, с нуля, с нуля ...

// 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"')
        })

Может быть, не совсем ясно, что нужно очищать ошибки, но, основываясь на опыте моего последнего проекта, где я использую эту способность много раз, я хочу знать, правильное ли это решение, или, может быть, мне нужно пропустить этот шаблон?

...