Я широко использую fla sh в моем приложении Node.js Express, но для одного маршрута я не могу получить fla sh или перенаправить на работу. Представления имеют мопс :
form.permissive(action=`/setPermissive/${device._id}/${device.allowUnlock}` method="POST")
label.groupTitle(for="setPermissive") Allow Unlock
button.switch(type="submit" name="setPermissive")
label.switch
if (device.allowUnlock)
input(type="checkbox" name="setPermissive" checked)
else
input(type="checkbox" name="setPermissive" )
span.slider
маршрут:
router.post('/setPermissive/:id/:permissive', catchErrors(deviceController.changePermissive));
контроллер:
exports.changePermissive = async (req, res) => {
const permissive = (req.params.permissive === "false") ? false : true;
const device = await Device.findOneAndUpdate({ _id: req.params.id }, { $set: { allowUnlock : !permissive } }, {
new: true
}).exec();
req.flash('success', `Successfully updated ${device.name}`);
res.redirect('/devices');
};
Я знаю, что Device.findOneAndUpdate
выполняется, потому что я его можно увидеть в бэкэнде, но я не получаю сообщение fla sh, меня не перенаправляют, и пользовательский интерфейс не отражает обновление. Если я вручную обновлю sh страницу, я получаю сообщение fla sh и пользовательский интерфейс обновляется.
У меня есть похожие маршруты, которые fla sh перенаправляют, как ожидалось, например:
form.form(action=`/changeStatusEnabled/${device._id}/${newStateEnabled}` method="POST")
input.button(type="submit" value=`${currentStateEnabled}` onclick=`return confirm('${msgConfEnabled}');`)
router.post('/changeStatusEnabled/:id/:state', catchErrors(deviceController.changeStatusEnabled));
exports.changeStatusEnabled = async (req, res) => {
const myBoo = (req.params.state === "enable") ? true : false;
const device = await Device.findOneAndUpdate({ _id: req.params.id }, { $set: { isEnabled: myBoo }}, {
new: true
}).exec();
req.flash('success', `Successfully updated ${device.name}`);
res.redirect(`/devicesAdmin`);
};
Что мне не хватает?