【问题标题】:Returning a custom status code from express-validator .isEmail()从 express-validator .isEmail() 返回自定义状态码
【发布时间】:2022-02-07 10:50:22
【问题描述】:

我在 Node 方面的经验很少,在 Express/express-validator 方面的经验更少(更像是 NestJS 人)。我正在调整端点上的一些验证,几乎所有东西都在正常工作。目前,当.isEmail() 验证失败时,我在尝试返回400 HTTP 状态代码时遇到了一个小问题。目前它返回正确的消息,但带有(显然是默认的)404。如何设置.isEmail() 以在失败时返回400 错误?我用.custom() 尝试了一些解决方法,但没有成功。目前的代码是:

exports.recoverPassword = [
    check('email')
    .custom((email, { req }) => {
        return new Promise (async (resolve, reject) => {
            let noEmail = (email === null || email === undefined)
            if(noEmail) {
                req.statusCode = 400
                return reject()
            }
            return resolve();
        })
    }).withMessage('Invalid request.')
    .bail()
    .isEmail()
    .withMessage('Email must be a valid email.')
    .custom((email, {req}) => {
        return new Promise(async (resolve, reject) => {
            let userExists = await ValidationHelper.exists(User, {email});
            if (!userExists) {
                req.statusCode = 404
                return reject()
            }
            return resolve();
        })
    }).withMessage('User not found.')
    .bail()
    .custom(async (email, {req}) => {
        return new Promise(async (resolve, reject) => {
            let user =  await ValidationHelper.first(User, {email})

            if (!user) {
                return reject()
            }
            if(user.blocked_at !== null) {
                req.statusCode = 403
                return reject()
            }
            return resolve()
        })
    }).withMessage('User account is blocked.')
];

【问题讨论】:

    标签: node.js express express-validator


    【解决方案1】:

    尝试将状态码设置为响应而不是请求

    exports.someRoute = (req, res, next) => { 
     res.statusCode = 400 
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      相关资源
      最近更新 更多