node.js - 在 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 状态而拒绝了承诺,所以它被抛出了,但是身体去哪里了?
谢谢,
本
解决方案
所以经过几个小时的调试和玩耍,我意识到err
我捕获的对象是一个我不知道其结构的对象。具体来说,它有一个响应组件。err.response.data
得到了我想要的。我仍然想知道是否有人有任何想法我怎么能找到这样的东西,我没有在文档中看到任何指向这个方向的东西,我猜日志记录不是我所期望的。
推荐阅读
- arduino - 使用分段 lcd (raspberry pi / arduino) 重新调整计算器的用途
- java - java中<字符的Jaxb解析
- java - 用类似的方法创建java接口
- c# - 如何使用 EF Core 在 .NET Core 3.1(无 LINQ)中为 CRUD 操作创建自定义扩展方法?
- workflow - 工作流 - 获取由字段创建的事务
- python - 使用 Colorama 在 ubuntu 终端中显示 Ansii 文本颜色
- python - 如何检查 QlistWidget 中的项目并在 python pyqt5 中的选定项目上运行函数
- javascript - 如何检测 iframe 是否接受创建的 blob url 作为 iframe 的 src
- javascript - 如何将此对象转换为数组?
- oracle - 从游标中获取行数据 - PL/SQL