Как вернуть данные, связанные с ответом об ошибке? - PullRequest
0 голосов
/ 30 мая 2019

Я делаю запрос от внешнего интерфейса к маршруту в моем внутреннем интерфейсе, который проверяет токен, связанный с пользователем, который отправит ответ об ошибке обратно внешнему интерфейсу, если токен истек.Я отправляю json вместе с ним, но после выполнения console.log сообщения об ошибке в блоке перехвата json, отправленный вместе с ответом об ошибке, не отображается.

Отправка ответа об ошибке, подобного этому

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

Но ответ, который я получаю в блоке перехвата во внешнем интерфейсе, не имеет признаков json, отправленного с ошибкой.

POST http://localhost:3001/check-validation 401 (неавторизовано) Ошибка: не удалось выполнить запрос с кодом состояния 401 при createError (createError.js: 17) при урегулировании (bor.js: 19) в XMLHttpRequest.handleLoad(xhr.js: 78)

Я не понимаю, почему json, отправленный с ответом об ошибке, не отображается и как его получить?

1 Ответ

0 голосов
/ 30 мая 2019

После выполнения console.log ошибки отображается только трассировка стека ошибки, а не данные, связанные с ней. Данные, отправленные вместе с ним, могут быть получены и зависят от того, как был сделан запрос или из какой библиотеки он был сделан. Если запрос сделан axios, то может быть сделано следующее:

axios.post('/formulas/create', {
    name: "",
    parts: ""
})
.then(response => { 
    console.log(response)
})
.catch(error => {
    console.log(error.response.data.message)
});

Здесь, в axios, детали ошибки будут заключены в error.response. Принимая во внимание, что если запрос был сделан API fetch, то что-то следующее может решить проблему:

fetch('/401').then(function(response) {
  if (response.status === 401) {
    return response.json()
  }
}).then(function(object) {
  console.log(object.message)
})

P.S Я много искал по этой проблеме, но не получил ответа по SO, не получил ни статьи, ни документации по ней, даже официальные документы Express по обработке ошибок не помогли. Наконец я понял, что проблема заключается в библиотеке, которая используется для выполнения запроса. Вот почему отвечая на мой собственный вопрос, чтобы отметить наличие этого вопроса на SO. Подробное обсуждение можно найти здесь , относящемся к axios , и здесь , относящемуся к fetch api

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...