我在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上的表单操作,但允许我返回而不实际重定向浏览器,以便表单可以保持填充(以及为我的用户显示错误消息?
答案 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处理程序。