用户更正错误后,我的帖子不会更新。例如:
场景1(正常):我想更新标题并将其重命名为其他内容。假设标题是 test ,我将其重命名为 test123 。用户按下更新按钮,它工作正常(更改存储并可见)。
场景2(问题):但是,如果用户按下更新按钮且标题为空白(无内容),则会显示该字段是必需的。用户输入 test123456 的标题,然后再次按更新按钮。但是,这次没有保存更改!
代码:
router.post('/items/update/:itemId', async (req, res, next) => {
const {title, description, imageUrl} = req.body;
const item = new Item({title, description, imageUrl});
item.validateSync();
if (item.errors) {
res.status(400).render('update', {item});
} else {
await Item.findByIdAndUpdate(
req.params.itemId,
{
title: req.body.title,
description: req.body.description,
imageUrl: req.body.imageUrl
}
);
res.redirect('/');
}
});
我正在使用express for server routes,FYI。
非常感谢您的帮助!
编辑1:所以我只是想通了如果我将if
语句修改为if (!item.errors) { }
并忘记了else条件,即使用户输入空标题,我的代码也能正常工作。但是,我确实喜欢显示的错误消息,表明必须提供标题才能继续。我正在使用把手作为我的模板。如果我找到解决方案,我会告诉你。
答案 0 :(得分:0)
解决。当标题为空白并重试时,ID不同。
router.post('/items/update/:itemId', async (req, res, next) => {
const {title, description, imageUrl} = req.body;
const item = new Item({title, description, imageUrl});
item.validateSync();
if (item.errors) {
res.status(400).render('update', {item});
item._id = req.params.itemId; // <-- fixed problem
} else {
await Item.findByIdAndUpdate(
req.params.itemId,
{
title: req.body.title,
description: req.body.description,
imageUrl: req.body.imageUrl
}
);
res.redirect('/');
}
});