#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: Я знаю, что защита паролем все еще отсутствует, но я хочу, чтобы это запустилось, прежде чем я добавлю больше в код.