2

我在 Node.JS 上使用 Express.JS 来构建我正在构建的应用程序。我正在设置路线并尽力维护 RESTful 架构。

接受表单输入,遇到某种错误(不一定是验证错误)然后向用户显示相同的表单,但首先包括他们发送到服务器的数据的过程是什么?

起初,我将 POST 数据存储到一个会话中,但这从来都不是一个好的解决方案,更像是一个 hack。

然后我调整了我的路线,而不是用来app.post|put|del()处理表单提交,然后使用app.all()将用作“包罗万象”的路线。基本上,如果我遇到错误,我会调用next(),将控制权返回给我的“包罗万象”路线。这最终导致我偏离了我原来的 RESTful 方法。

现在,我已经设置了路由以更准确地反映 RESTful 方法。但是,如果我使用app.redirect(),数据会在重定向中丢失。我最终使用了另一种 hack 的感觉:(controller.new_form.apply(this, arguments);这被称为 inside controller.create()

当然我可以使用客户端验证,但我正在尽我所能创建一个完全在服务器端运行的应用程序,然后添加客户端代码作为改进用户体验的一种方式。

是否有一些方法可用于 express.js(或 connect.js),它接受与表单本身不同的 URI 上的表单操作,但允许我返回而不实际重定向浏览器,以便表单可以保持填充(以及为我的用户显示错误消息)?

4

2 回答 2

2

您不能res.render根据成功或失败使用不同的模板调用吗?因此,如果所有 POSTed 表单数据都通过验证,是否继续执行res.render 'thankyou.jade'其他操作res.render 'form.jade'?这类似于 kcbanner 的建议,只是没有为每个方法定义不同的方法,尽管如果你有任何特殊的逻辑,这是一件好事。

于 2011-04-18T03:15:13.137 回答
0

您可以从其他视图调用视图,只需传入 req 和 res。

例子:

exports.index = function(req, res) {
  res.render('index');
};

exports.verify = function(req, res) {
  res.local('flash', 'Set a template local variable');
  exports.index(req, res);
};

这里我在一个视图中设置模板本地,然后调用另一个视图来实际处理响应。您可以在您的 post 处理程序中调用您的 get 处理程序。

于 2011-04-17T17:33:21.413 回答