首页 > 解决方案 > 在 Axios 调用中使用 Joi 进行验证没有给出正确的响应

问题描述

我正在尝试在 NodeJS 服务器上应用 Joi 验证,而我的前端是 Vue。这是我的后端验证功能(在 AuthenticationPolicy 中):

    register(req, res, next) {
        const schema = Joi.object({
            email: Joi.string().email(),
            password: Joi.string().required()
        })
        const result = schema.validate(req.body)
        if (result.error) {
            console.log(`There was an error: ${JSON.stringify(result.error.details)}`)
            res.status(400).send(JSON.stringify(result.error.details))
        }
        else {
            next()
        }
    }

这是注册的处理程序:

var authenticationPolicy = require('./policies/AuthenticationPolicy')
router.post('/register', authenticationPolicy.register, (req, res, next) => {
    console.log(`Entered registration on server after validation`)
    res.send(`Registered! ${req.body.email}`)
})

当我尝试输入无效的电子邮件时,服务器会记录:

There was an error: [{"message":"\"email\" must be a valid email","path":["email"],"type":"string.email","context":{"value":"Mailmailmail","key":"email","label":"email"}}]
POST /register 400 43.382 ms - 151

这是前端的相关部分:服务:

    register(credentials) {
        return Api().post('/register', credentials) //Api is the axios created to my baseURL
    }

组件中的方法:

            async register() {
                try {
                    this.error = null;
                    await AuthenticationService.register({
                        email: this.email,
                        password: this.password

                    })

                }
                catch (err) {

                    console.log(`${err.message}`)
                    this.error = err.message
                }
            }

当我使用无效的电子邮件 (mailmail) 运行它时,浏览器会记录Request failed with status code 400. 为什么err.message我在前端登录的内容与我从后端得到的响应不匹配?如果我理解正确的话,Axios 因为 400 状态而拒绝了承诺,所以它被抛出了,但是身体去哪里了?

谢谢,

标签: node.jsvalidationvue.jsaxiosjoi

解决方案


所以经过几个小时的调试和玩耍,我意识到err我捕获的对象是一个我不知道其结构的对象。具体来说,它有一个响应组件。err.response.data得到了我想要的。我仍然想知道是否有人有任何想法我怎么能找到这样的东西,我没有在文档中看到任何指向这个方向的东西,我猜日志记录不是我所期望的。


推荐阅读