Отправить сообщение об ошибке запроса axios post с сервера node js на сторону клиента

Как я могу отправить узлу сообщение об ошибке запроса JS Axios? Я не хочу печатать ошибку в консоли, я хочу отправить ее в приложение.

Например, если я тестирую postman и нажимаю localhost:8080/list/2, а 2 — неправильный идентификатор, вместо того, чтобы бесконечно показывать sending request, я хочу, чтобы возвращалось конкретное сообщение об ошибке JSON.

**server.js** proxy server running on localhost:8000 makes request to another endpoint

app.get("/list/:id", function (req, res) {
  const { id } = req.params;
  axios
    .get(`${BASE_URL}/list/` + id)
    .then((response) => {
     res.send(response.data)
    })
    .catch((error) => {
       if (error.response) {
            res.send(error.response)
        }
    });
});

2. Как можно использовать это сообщение об ошибке в запросе Axios на стороне клиента?

const getList = () => {

    axios
      .get("http://localhost:8000/list", {
          params: {
            id: '4'
          }
        })
      .then((resp) => {
        const data = resp.data; 
        console.info(resp.data)

      })
      .catch((err) => {
        console.error(err);
      });
  };

Когда вы передаете правильный идентификатор, вы видите ответ в почтальоне? если да, то я предполагаю, что ваш объект ошибки не имеет свойства ответа, и поэтому он не входит внутрь блока if.

Anil 08.12.2022 02:28

Вы перепутали параметры маршрута и запроса. Вместо этого используйте axios.get("http://localhost:8000/list/4"). Параметр params предназначен для создания параметров запроса.

Phil 08.12.2022 02:51
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
198
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

error.response — это объект Axios Response, который не очень хорошо сериализуется в JSON.

См. Axios — Обработка ошибок.

Вы должны ответить со статусом ответа восходящего потока и данными

app.get("/list/:id", async (req, res, next) => {
  const { id } = req.params;
  try {
    const { data } = await axios.get(`/list/${id}`, {
      baseURL: BASE_URL,
    });
    res.send(data);
  } catch (err) {
    if (err.response) {
      res
        .status(err.response.status) // proxy the status
        .send(err.response.data); // proxy the data
    }
    next(err); // some other error
  }
});

К вашему сведению, опция Axios params предназначена для построения параметров запроса URL. Ваш клиентский запрос должен использовать

axios.get("http://localhost:8000/list/4")

К вашему сведению, у Express гораздо более простая библиотека прокси — express-http-proxy

const proxy = require('express-http-proxy');

app.use("/list", proxy(BASE_URL, {
  https: true,
  proxyReqPathResolver: (req) => req.originalUrl,
}));

Другие вопросы по теме