javascript - 为什么我们要为错误消息重新渲染页面(express、nodejs)
问题描述
我在某处读到,通常重新渲染页面以显示错误消息并重新定向以显示成功消息。我在 express js 的一些代码中使用了这个原则,这导致了一些令人头疼的问题。
例如,假设用户在表单中输入了无效信息。我会通过这样做来处理它:
app.post('/lists', (req, res) => {
let title = req.body.todoListTitle.trim();
if (!title) {
req.flash("error", "Please provide a title");
res.render("new-list", {
flash: req.flash(),
});
});
这有点烦人,因为每次出现错误时我都必须将“flash”对象传递到我的视图中,以便重新呈现出现错误的页面。
但是,当我显示“成功”消息时,它就容易多了。因为约定是重定向(发出另一个“get”请求),所以我可以在我的文件顶部添加自定义中间件来处理错误。
app.use((req, res, next) => {
res.locals.flash = flash();
delete req.session.flash
next();
})
通过这样做,我可以使实际处理请求的中间件保持非常简单。尽管没有将错误传递给我的视图,但由于我上面的自定义中间件,它们会自动传递。
app.get('/lists', (req, res) => {
res.render('lists');
});
所以我的总体问题如下:为什么存在这个约定?当我们想要显示消息(无论它们是成功消息还是失败消息)时,总是只重定向不是更简单吗?
解决方案
我可能错了,但对我来说,这种情况只与表格有关。
当您填写表格时,您不想在失败时重新输入所有内容。因此,如果您想要失败:
- 能够执行 f5 重试(仅在未重定向时才可行:我猜只有程序员知道并喜欢这种行为)
- 查看页面上的错误,然后再次单击“发送”(可以使用重新渲染或重定向来完成,只要表单仍然填写)
ps:如果使用ajax推送表单,则没有重定向/重新渲染问题。考虑一下 :)
推荐阅读
- serverless-framework - 无服务器模板中的提供者级别角色和 iamRoleStatements 有什么区别?
- arrays - Swift - 从元素中删除数组中的值
- angular - 获取错误类型错误:订阅时无法读取未定义的属性“0”
- python - 如何在python中获取特定父目录的路径
- shopware - 关联在数据库中,但无法通过 DAL 检索。将检索空的关联数组
- ag-grid-react - 在 AgGridReact 中使用 cellRenderer 时如何防止 onRowClicked
- javascript - React:组件隐藏/显示与销毁/重新创建
- contact-form-7 - 弹出窗口在提交文本后显示联系表格 7 之前关闭
- django - 获取 err_connection_refused 从 Windows 访问在 wsl2 上运行的 django,但可以从 Windows 终端卷曲
- javascript - 使用 jQuery 禁用过滤列表中的空类别