如何获取与错误响应相关的数据?

时间:2019-05-30 18:46:03

标签: express error-handling

我正在从前端向后端发出一个正在验证与用户关联的令牌的路由的请求,如果令牌已过期,则该请求会将错误响应发送回前端。我正在发送一些json,但在catch块中对错误消息进行console.log时,未显示错误响应中发送的json。

像这样发送错误响应

res.status(401).json({
                message: 'User session has expired'
            })

但是我在前端的catch块中得到的响应没有错误发送的json的迹象。

  

POST http://localhost:3001/check-validation 401(未经授权)   错误:请求失败,状态码为401       在createError(createError.js:17)       在解决时(settle.js:19)       在XMLHttpRequest.handleLoad(xhr.js:78)

我不明白为什么不显示错误响应中发送的json以及如何获取它?

1 个答案:

答案 0 :(得分:0)

执行错误的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)
})

P.S我在这个问题上搜索了很多,但是没有得到答案,也没有任何相关的文章或文档,即使是有关错误处理的官方Express文档也没有帮助。最后,我了解到问题出在用于发出请求的库中。这就是为什么回答我自己的问题以在SO上标记该问题的原因。可以在这里related to axios和这里related to fetch api

中找到详细的讨论