2017-01-25 50 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