Как я могу получить объект JSON, который мой бэкэнд отправляет, в моем внешнем коде, если статус HTTP не равен 200?
Когда мой бэкэнд отправляет 200-ответ, я могу показать возвращенные данные JSON, выполнив следующие действия:
бэкэнд
res.status(200).json({status: 'Information found'})
внешний интерфейс
.then(data => console.info(data.status)) // Information found
Однако, когда я пытаюсь сделать то же самое со статусом 400 или 404, я не могу получить возвращенный JSON.
бэкэнд
res.status(404).json({error: 'No information found'});
внешний интерфейс
.catch(error => console.info('Error from backend', error))
результат
Сначала я попробовал error.error, но это не определено.
В чем разница с возвратом 200-статуса и как я могу получить сообщение, которое я отправляю из серверной части в моем интерфейсе?
РЕДАКТИРОВАТЬ
Внешний интерфейс
axios.post('https://firebaselink.net/getTestData', { id: orderNumber })
.then(data => console.info(data.status))
.catch(error => console.error(error))
Бэкэнд
export const getTestData = functions.https.onRequest((req, res) => {
cors(req, res, () => {
const id = req.body.id;
admin.database().ref(`data/${id}`).once('value')
.then(snapshot => {
if (snapshot) res.status(200).json({status: "Information found"})
else res.status(404).json({error: "Information not found"})
}).catch(error => res.status(500).json({error: 'Internal error}))
})
})
@Hodrobond не знаю, какой браузер вы используете, но console.info(a) мне подходит
Ответ будет зависеть от библиотеки, которую вы используете для запроса. На что вы звоните .then ()?
@AlFarnsworth, добавил еще код
Чтобы не сбить с толку ваш вопрос, но вы, похоже, не добавляете в тело ответа дополнительную информацию, которую нельзя вывести из статуса ответа, например, 404 = «не найден», 500 = «внутренняя ошибка сервера» и т. д.
Голосование за закрытие как опечатка / больше не проблема / RTFM
Спасибо @Phil - error.response.status делает свою работу !!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вопрос: Я пробовал error.error, но это не определено. Как мне распечатать мою ошибку?
А:Javascript нетипизирован, что означает, что object может быть чем угодно. Лучшим решением здесь было бы сделать console.info(JSON.stringify(error, null, 2), чтобы узнать, какое у него свойство, а затем получить доступ к распечатке сообщения.
Объект error обычно имеет свойство message.
Рекомендации:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error
console.error(error) (или как OP имеет console.info('Error from backend', error)) должен производить столько же информации (если не больше), чем передача объекта через JSON.stringify.
К вашему сведению @Phil, исходная публикация не содержит кода console.error,
console.info, console.error, не имеет значения; последний просто делает его красным
Необоснованно. Первоначальная публикация о error.error, в результате которой свойство error было неопределенным. Таким образом, было использовано решение для проверки свойства объекта, чтобы увидеть, что там находится, без знания console.info или console.error.
Извините, я не понимаю ваш комментарий. Чтобы уточнить, у OP есть console.info('Error from backend', error). Это покажет, по крайней мере, такой же объем данных, что и console.info(JSON.stringify(error, null, 2)), но также будет включать любые методы и временные данные. Таким образом, ваш ответ содержит меньше информации, чем OP уже был посвящен
Как описано в комментарии. Мое решение должно было бы сообщить автору, что его сообщение об ошибке находится в пути response.status. @phil @Thore
Как создается интерфейсное обещание?