Express.JS处理服务器端错误

时间:2011-03-29 00:27:35

标签: javascript rest node.js express

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

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

首先,我将POST数据存储到一个会话中,但这从来没有感觉这是一个很好的解决方案,更像是一个黑客。

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

现在,我已经设置了更准确地镜像RESTful方法的路由。但是,如果我使用app.redirect(),则数据会在重定向中丢失。我最终使用的感觉就像另一个黑客:controller.new_form.apply(this, arguments);(在controller.create()内调用)

当然我可以使用客户端验证,但我正在尽最大努力创建一个完全在服务器端工作的应用程序,然后添加客户端代码,以改善支持它的用户体验。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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);
};

这里我在一个视图中设置了local local,然后调用另一个视图来实际处理响应。你可以在帖子处理程序中调用你的get处理程序。