Как мне исправить ошибку 404 (не найдена) в CRUD-приложении?

#javascript #reactjs #mongodb #axios

#javascript #reactjs #mongodb #axios

Вопрос:

Я пытаюсь добавить функцию обновления в мое приложение MERN CRUD, и я не могу заставить обновление работать должным образом. Я не могу понять, как создать функцию для обработки обновления или API для передачи команды между приложением и базой данных. Всякий раз, когда я нажимаю отправить, я получаю ошибку 404.

Вот моя функция для обработки обновления со страницы:

   onSubmit = e => {
    e.preventDefault();
    const updatedObj = {
      bucketListItem_name: this.state.bucketListItem_name,
      bucketListItem_comment: this.state.bucketListItem_comment,
      bucketListItem_completed: this.state.bucketListItem_completed
    };

    API.submitItemEdits(this.props.match.params.id, updatedObj)
      .then(res => console.log(res.data))
      .catch(err => console.log(err));

      this.props.history.push("/");
  };

  

Вот мой API:

   submitItemEdits: function(id, updatedObj) {
    return axios.post("/api/bucketList/"   id, updatedObj);
  }
  

И на случай, если они понадобятся, вот контроллер:

   update: function(req, res) {
    db.bucketListItem
      .findOneAndUpdate({ _id: req.params.id }, req.body, {upsert: true})
      .then(dbModel => res.json(dbModel))
      .catch(err => res.status(422).json(err));
  }
  

И вот мой маршрут:

 router
  .route("/:id")
  .get(listController.findById)
  .put(listController.update)
  .delete(listController.remove);
  

Я смог утешить.запишите информацию для updatedObj, поэтому я почти уверен, что информация из формы доходит до API. И я почти уверен, что это что-то маленькое, что я упускаю из виду.

Заранее большое спасибо за вашу помощь.

Ответ №1:

axios.post отправит данные на router.post('/api/bucketList/:id' , ()=>{}) маршрут.

Таким образом, он не будет отправлен на правильный маршрутизатор. Для обновления вам необходимо отправить данные в router.put("/api/bucketList/:id", ()=>{}) .

Для этого вам нужно использовать axios.put() вместо axios.post()

Ответ №2:

В вашем маршрутизаторе вы не определяете метод post,

В функции SUBMITEMEDITS axios следует использовать метод «put» вместо «post»