axios.put возвращает статус 200, но не изменяет данные в БД

#reactjs #axios #put

Вопрос:

В настоящее время я создаю страницу профиля, чтобы пользователи могли изменять свои пользовательские данные. При нажатии на кнопку отправить срабатывает следующая функция:

 const onSubmit = (e) => {
    e.preventDefault();
    api.updateUser(user.id, queryString.stringify(profile))
      .then(res => {
        console.log(profile)
        console.log(res)
        history.push(`/`);
      })
  };

 

В user.id исходит от токена и, похоже, не является проблемой, так как вызов выполнен (статус 200). Профиль-это объект js, сохраненный и измененный в состоянии использования, имеющий такую структуру :

 const [profile, setProfile] = useState({
    first_name: "",
    last_name: "",
    ...
  })
 

Это вызов api:

 const api = {
  updateUser: async (user_id, userData) => {
    return await axios.put(`${root}/users/${user_id}`, userData, axiosConfig)
  }
}
 

Он принимает идентификатор пользователя, полученный из токена, и полезную нагрузку в качестве аргументов, а затем выполняет запрос put, добавляя axiosConfig в заголовок (который также, похоже, работает, иначе запрос был бы отклонен).

Это код, выполняемый на серверной части:

 userRouter.put('/users/:user_id', verifySpecificUser, (req, res) => {
    const { user_id } = req.params
    User.findOneAndUpdate({ _id: user_id }, req.body)
        .then(user => res.json(user))
        .catch(err => res.json(err))
})
 

verifySpecificUser-это промежуточное программное обеспечение, которое проверяет токен и пытается соответствовать обновляемому пользователю. Похоже, это работает, иначе я бы не получил статус 200.

Как вы можете видеть, я регистрирую почти все, чтобы найти ошибку. user.id является строкой, как и ожидалось, профиль-это объект с правильными обновленными данными. Ответ, который я получаю, имеет статус 200, поэтому вызов api выполняется, однако эти данные в базе данных остаются неизменными. При тестировании маршрутов с почтальоном все работает, но отправка данных с интерфейса, как описано выше, не работает. Есть идеи, что случилось?

PS: Я знаю, что защита паролем все еще отсутствует, но я хочу, чтобы это запустилось, прежде чем я добавлю больше в код.