Express.JS处理服务器端错误

我在Node.JS上使用Express.JS来创build一个应用程序。 我正在build立路线并尽我所能维护一个RESTful架构。

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

起初,我将POST数据存储到一个会话中,但是这从来没有像一个好的解决scheme,更像是一个黑客。

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

现在,我已经build立了我的路线来更准确地反映REST风格。 但是,如果我使用app.redirect() ,则数据在redirect中丢失。 我已经结束了使用感觉像另一个黑客: controller.new_form.apply(this, arguments); (这在controller.create()被调用)

当然,我可以使用客户端validation,但我正在尽我所能创build一个完全在服务器端运行的应用程序,然后添加客户端代码,以此来改善受支持的用户体验。

有没有一些方法可用express.js(或connect.js)接受表单操作在不同的URI从表单本身,但允许我回去而不实际redirect浏览器,以便表单可以保持填充(以及显示一个错误messoge)为我的用户?

难道你不能只根据成功或失败调用res.render与不同的模板? 因此,如果所有的POST数据表单数据都有效,请继续res.render 'thankyou.jade'否则再次res.render 'form.jade' ? 这与kcbanner的build议类似,只是没有为每个方法定义不同的方法,但如果你有任何特殊的逻辑,这是一件好事。

您可以从其他视图调用视图,只需传递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处理程序。