express - 如何获得与错误响应相关的数据?

标签 express error-handling

我正在从前端到后端的路由中发出一个请求,该请求正在验证与用户关联的 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 axiosrelated to fetch api中找到详细的讨论

关于express - 如何获得与错误响应相关的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56383962/

相关文章:

Spring-Boot - 错误处理

javascript - 如何展示单个产品?

c# - .Net Web Api不显示必需属性的错误消息

powershell - Powershell : How to check the good execution of a batch file on a remote computer using invoke-command

angularjs - 将 Angular 1 Simple 与 Express JS 一起使用

node.js - 电子邮件验证后自动登录用户(Express/passport)

node.js - 了解node Angular Express和mongo之间的通信

c# - 集合在 asp.net MVC 4 中被修改错误

javascript - 如何将 Plupload 与 Node.js 一起使用并显示上传百分比?

javascript - 使用 Firebase 和 Express/Node.js 获得待处理的 promise