mongoose findByIdAndUpdate не сохраняет изменения в бд
Есть функция изменения данных о пользователе в моём контроллере:
async editUser(req, res) {
try {
const { username, password, name, surname, patronymic, userRole } =
req.body;
var hashPassword = bcrypt.hashSync(password, 5);
User.findByIdAndUpdate(mongoose.Types.ObjectId(req.params.id), {
username,
password: hashPassword,
name,
surname,
patronymic,
roles: [userRole],
});
req.session.message = {
iconStyle: "check",
type: "check-Success",
intro: "Успешно",
message: "Информация обновлена.",
};
res.status(400).redirect("/users");
} catch (e) {
console.log(e);
res.status(400).json({ message: "nt" });
}
}
Так-же роут:
router.post("/editUser/(:id)", controller.editUser);
И при отправке post запроса через postman функция изменения данных отрабатывает, меня ридеректит, но данные о пользователе не изменяются. req.body конечно заполнен полностью и req.params.id пренадлежит существующему пользователю. Я только учусь, подскажите - в чём может быть проблема?
Ответы (1 шт):
В app.js подключаем модуль method-override
const methodOverride = require("method-override");
...
...
app.use(methodOverride("_method"));
в роутере используем post:
router.post("/editUser/(:id)", controller.editUser);
Сама функция // вводим переменную user, делаем запрос к бд, сохраняем данную переменную user.save() так-же используем { useFindAndModify: false }
async editUser(req, res) {
try {
const { username, password, name, surname, patronymic, userRole } =
req.body;
var hashPassword = bcrypt.hashSync(password, 5);
let user = await User.findByIdAndUpdate(
req.params.id,
{
username,
password: hashPassword,
name,
surname,
patronymic,
roles: [userRole],
},
{ useFindAndModify: false }
);
await user.save();
req.session.message = {
iconStyle: "check",
type: "check-Success",
intro: "Успешно",
message: "Информация обновлена.",
};
res.status(400).redirect("/users");
} catch (e) {
console.log(e);
res.status(400).json({ message: "nt" });
}
}
}
<form class=""
action="/editUser/<%=AllUsers[i]._id%>?_method=PUT"
method="post"
name="form">
Данные решения помогли мне исправить проблемы, скорее всего основная проблема была в том, что я не использовал функцию save и не правильно обращался к бд, await bless rng