2017-01-25 81 views
2

我有一个函数,它使用axios get方法并且在promise上返回我已经添加了错误处理来处理当我尝试连接的服务已被禁用的情况。axios不能访问错误消息

axios.get('/someurl') 
    .then(() => { 
     // this does not matter 
    }) 
    .catch((err) => { 
     logger.error(TAG, 'postCreateVm', err); 
     return reply(Boom.forbidden(err.message)); 
    }); 

当我使用卷曲我可以看到的消息,响应状态为403:

# curl -X GET localhost:3000/someurl 
{ 
    "message": "abort" 
} 

的问题是,当我尝试访问“消息”属性我得到什么,但我知道在那! (我曾尝试使用err.response.data也没有成功也)

根据该文件,我应该能够访问它:axios handling errors

什么是访问此信息的正确方法?

回答

5

我看了他的代码,它看起来正确的响应是在错误中,但在axios中,settle.js用通用响应掩盖它。你可以在你的catch块作为字符串化JSON记录错误对象看到服务器响应:

error.response.data.message 
+0

它也取决于服务器端。我有我的服务器端在Python和Flask,并且事实证明错误消息没有发送(我有一个try-catch,并在catch块我重新提出相同的异常)。在注册一个像http://flask.pocoo.org/docs/0.12/patterns/apierrors/这样解释的错误处理程序之后,错误消息就像在这个答案中一样。 – Mahdi

1

我的陷阱:

console.log('caught:::', JSON.stringify(response, null, 2)) 
在我的情况

所以,我通过访问返回的错误是固定的,函数接收到响应属性而不是错误对象。所以,要访问我曾经使用的消息:

err.data.message