我正在从前端到后端的路由中发出一个请求,该请求正在验证与用户关联的 token ,如果 token 已过期,则会将错误响应发送回前端。我正在发送一些json
,但是在catch块中执行错误消息的console.log
时,未显示错误响应中发送的json。
这样发送错误响应
res.status(401).json({
message: 'User session has expired'
})
但是我在前端的catch块中得到的响应没有发送带有错误的json信号。
POST http://localhost:3001/check-validation 401 (Unauthorized) Error: Request failed with status code 401 at createError (createError.js:17) at settle (settle.js:19) at XMLHttpRequest.handleLoad (xhr.js:78)
我不明白为什么不显示错误响应中发送的json以及如何获取它?
最佳答案
执行错误的console.log时,仅显示错误的stacktrace,而不显示与错误关联的数据。随其发送的数据可以采购,并取决于请求的发出方式或发出的库。如果请求是由axios
发出的,则可以执行以下操作:
axios.post('/formulas/create', {
name: "",
parts: ""
})
.then(response => {
console.log(response)
})
.catch(error => {
console.log(error.response.data.message)
});
在这里,在axios中,错误的详细信息将包裹在
error.response
中。而如果该请求是由fetch
API发出的,则可以通过以下方法解决该问题:fetch('/401').then(function(response) {
if (response.status === 401) {
return response.json()
}
}).then(function(object) {
console.log(object.message)
})
附言:关于这个问题,我进行了很多搜索,但没有得到任何答案,也没有任何相关文章或文档,即使有关错误处理的官方Express文档也无济于事。最后,我了解到问题出在用于发出请求的库中。这就是为什么回答我自己的问题以在SO上标记该问题的原因。可以在related to axios和related to fetch api中找到详细的讨论
关于express - 如何获得与错误响应相关的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56383962/