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的状态而拒绝了这一承诺,所以它被扔了,但尸体去了哪里?

谢谢,

Ben

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

最新更新