Топор ios дает ошибку 404 после действия удаления - PullRequest
0 голосов
/ 13 января 2020

Я использую приложение React, в котором есть несколько способов обновления пользовательских данных. Одной из этих функций является удаление фильмов из списка избранных фильмов с помощью Ax ios axios.delete:

removeFavorite(event, favorite) {
  event.preventDefault();
  console.log(favorite);
    axios.delete(`https://flix-app-test.herokuapp.com/users/${localStorage.getItem('user')}/favorites/${favorite}`, {
      headers: { Authorization: `Bearer ${localStorage.getItem('token')}` }
    })
      .then(response => {
        this.getUser(localStorage.getItem('token'));
      })
      .catch(err => {
        console.log(err);
      });
  }

Этот код находится в файле index.js:

app.delete('/users/:username/movies/:movieId', passport.authenticate('jwt', { session: false }), function(req, res) {
  Users.findOneAndUpdate({ username : req.params.username }, {
    $pull : { favorites : req.params.movieId }
  },
  { new : true }, // This line makes sure that the updated document is returned
  function(err, updatedUser) {
    if (err) {
      console.error(err);
      res.status(502).send("Error: " + err);
    } else {
      res.json(updatedUser)
    }
  });
});

По какой-то причине я получаю сообщение об ошибке 404 при попытке удалить mov ie:

Ошибка: «Ошибка запроса с кодом состояния 404» createError createError. js: 16 урегулировать урегулирование. js: 17 handleLoad xhr. js: 59 dispatchXhrRequest xhr. js: 34 xhrAdapter xhr. js: 11 dispatchRequest dispatchRequest. js: 59 обратный вызов обещания * запрос Ax ios. js: 53 метод Ax ios. js: 68 bind bind. js: 9 getUser main-view.jsx: 58 componentDidMount main-view.jsx: 89 Реакция 6 unstable_runWithPriority scheduler.development. js: 818 Реакция 10 parcelRequire <["index.jsx"] <index.jsx: 21 newRequire sr c .78399e21. js: 47 parcelRequire sr c .78399e21. js: 81 ср c .78399e21 . js: 120 </p>

Я не могу выяснить, откуда возникла ошибка, после того, как авторизация прошла нормально, правильный m ov ie выбирается в качестве ответа, и сообщения отображаются на консоли соответственно.

Может ли кто-нибудь из коллег помочь мне найти, где находится ошибка? Заранее спасибо.

PS: @SuleymanSah предоставил решение для ошибки 404 ниже, НО я также добавляю свое собственное решение - действие axios.delete не работает. Проверьте ниже.

Ответы [ 2 ]

1 голос
/ 13 января 2020

URL в вашем удалении не совпадает с URL в приложении express. Вы должны изменить favorites на movies, чтобы устранить ошибку 404.

И чтобы иметь возможность удалить избранное, вы должны обновить свой код, используя $in.

app.delete('/users/:username/movies/:movieId', passport.authenticate('jwt', { session: false }), function(req, res) {
  Users.findOneAndUpdate({ username : req.params.username }, {
    $pull : { favorites : { $in: req.params.movieId } }
  },
  { new : true }, 
  function(err, updatedUser) {
    if (err) {
      console.error(err);
      res.status(502).send("Error: " + err);
    } else {
      res.json(updatedUser)
    }
  });
});

В зависимости от того, как вы храните избранное, вам может понадобиться вот так:

      $pull: {
        favorites: {
          _id: { $in: req.params.movieId }
        }
      }
0 голосов
/ 17 января 2020

@ SuleymanSah изящно предоставил решение для ошибки 404, но для меня осталась основная проблема - axios.delete, не удаляющая записи из массива списка.

Оказалось, что axios.delete только может удалить записи, сделанные приложением, используя axios.post. Записи, созданные прямо в массиве mongoDB, не могут быть удалены с помощью ax ios. Так что, если вам трудно удалить записи, попробуйте создать функцию, чтобы сначала добавить их, а затем удалить. В моем случае, только созданные пользователем записи могут быть удалены из приложения.

...