Axios не возвращает ошибку в веб-интерфейсе? - PullRequest
0 голосов
/ 01 октября 2019

Я создаю сервер на NodeJ, используя Express и MongoDB (Mongoose) для создания REST API, после чего я подключаю этот API к своему внешнему интерфейсу (ReactJS). проблема в том, что когда я отправляю пост-запрос от Axios, но при ошибке (Duplicate Key) они не отвечают на catch и дают ответ на .then вот так {data: "You Cannot Add Duplicate Link", status: 200, statusText: "OK", headers: Object, config: Object…}

FrontEnd:

axios
  .post(`${SERVER}`, post) // Here Post is an object
  .then(async res => {
    await this.setState({ host: res.data._id });
  })
  .then(() => this.setState({ loading: false }))
  .catch(async error => {
    await this.setState({ error: error.res });
  });
}

BackEnd:

const post_link_with_id = async (req, res) => {
  await models
   .create({
     // Objects like obj_key: req.body.obj_model
    })
   .then(result => res.send(result))
   .catch(err =>
      err.code === 11000 ? res.send("You Cannot Add Duplicate Link") : ""
    );
 };

1 Ответ

2 голосов
/ 01 октября 2019

Убедитесь, что вы отправляете error status при отправке ответа с сервера.

Стандартный способ отправки ответа - использование кода состояния.

Как,

res.status(statusCode).send(responseMessage);

При ошибке на сервере вы должны использовать следующий ответ:

err.code === 11000 ? res.status(404).send("You Cannot Add Duplicate Link") : "";

Ваш окончательный код бэкенда должен,

const post_link_with_id = async (req, res) => {
  await models
   .create({
     // Objects like obj_key: req.body.obj_model
    })
   .then(result => res.send(result))
   .catch(err =>
      err.code === 11000 ? res.status(400).send("You Cannot Add Duplicate Link") : ""
    );
 };

Возможно, вы захотите изменить подходящий статускод.

Подробнее см. документацию .

. Также исправьте метод setState() внешнего интерфейса, как предлагается в комментариях.

...