首页 > 解决方案 > 为什么我们要为错误消息重新渲染页面(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');
});

所以我的总体问题如下:为什么存在这个约定?当我们想要显示消息(无论它们是成功消息还是失败消息)时,总是只重定向不是更简单吗?

标签: javascriptnode.jsexpressflash-message

解决方案


我可能错了,但对我来说,这种情况只与表格有关。

当您填写表格时,您不想在失败时重新输入所有内容。因此,如果您想要失败:

  • 能够执行 f5 重试(仅在未重定向时才可行:我猜只有程序员知道并喜欢这种行为)
  • 查看页面上的错误,然后再次单击“发送”(可以使用重新渲染或重定向来完成,只要表单仍然填写)

ps:如果使用ajax推送表单,则没有重定向/重新渲染问题。考虑一下 :)


推荐阅读