Я делаю запрос от интерфейса к маршруту в моем бэкэнде, который проверяет токен, связанный с пользователем, который отправит ответ об ошибке обратно на интерфейс, если срок действия токена истек. Я отправляю с ним немного json
, но после выполнения console.info
сообщения об ошибке в блоке catch json, отправленный вместе с ответом об ошибке, не отображается.
Отправка ответа об ошибке, подобного этому
res.status(401).json({
message: 'User session has expired'
})
Но ответ, который я получаю в блоке catch во внешнем интерфейсе, не имеет признаков json, отправленного с ошибкой.
POST http://localhost:3001/check-validation 401 (Unauthorized) Error: Request failed with status code 401 at createError (createError.js:17) at settle (settle.js:19) at XMLHttpRequest.handleLoad (xhr.js:78)
Я не понимаю, почему json, отправленный вместе с ответом об ошибке, не отображается и как его получить?
При выполнении console.info ошибки отображается только трассировка стека ошибки, а не связанные с ней данные. Данные, отправленные с ним, могут быть получены и зависят от того, как был сделан запрос или какой библиотекой он был сделан. Если запрос сделан axios
, то можно сделать следующее:
axios.post('/formulas/create', {
name: "",
parts: ""
})
.then(response => {
console.info(response)
})
.catch(error => {
console.info(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.info(object.message)
})
PS Я много искал по этой проблеме, но не получил ответа на SO, не получил ни статьи, ни документации по ней, даже официальные документы Express по обработке ошибок не помогли. Наконец-то я понял, что проблема заключается в библиотеке, которая используется для выполнения запроса. Вот почему, отвечая на мой собственный вопрос, чтобы отметить наличие этого вопроса на SO. Подробное обсуждение можно найти здесь связанные с аксиомами и здесь связанный с получением API