2017-01-25 8 views
2

У меня есть функция, которая использует метод axios get и по обещанному возврату. Я добавил обработку ошибок для обработки ситуации, когда служба, к которой я пытаюсь подключиться, была отключена.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 sett.js маскирует его с помощью общего ответа. Вы можете увидеть ответ сервера, регистрируя объект ошибки в вашем поймать блок как строковая JSON:

console.log('caught:::', JSON.stringify(response, null, 2)) 

Так что в моем случае, я установил его, обращаясь к возвращаемой ошибке как:

error.response.data.message 
+0

Это также зависит от сервера. У меня есть серверная часть в Python и Flask, и оказалось, что сообщение об ошибке не было отправлено (у меня есть try-catch, а в блоке catch я повторно поднимаю одно и то же исключение). После регистрации обработчика ошибок, как описано здесь http://flask.pocoo.org/docs/0.12/patterns/apierrors/, сообщение об ошибке было доступно, как в этом ответе. – Mahdi

1

Моего улов функция получила свойство ответа вместо объекта ошибки. Итак, для доступа к сообщению, которое я использовал:

err.data.message