Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Express.JS处理服务器端错误_Javascript_Rest_Node.js_Express - Fatal编程技术网

Javascript Express.JS处理服务器端错误

Javascript Express.JS处理服务器端错误,javascript,rest,node.js,express,Javascript,Rest,Node.js,Express,我正在Node.JS上使用Express.JS构建一个应用程序。我正在设置路由,并尽我所能维护一个RESTful架构 接受表单输入,遇到某种错误(不一定是验证错误),然后向用户显示相同的表单,但首先包括他们发送到服务器的数据的过程是什么 起初,我将POST数据存储到一个会话中,但这从来都不是一个好的解决方案,更像是一次黑客攻击 然后我调整了我的路线,改为使用app.post | put | del()来处理表单提交,然后使用带有app.all()的路线作为“一网打尽”。基本上,如果我遇到错误,我

我正在Node.JS上使用Express.JS构建一个应用程序。我正在设置路由,并尽我所能维护一个RESTful架构

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

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

然后我调整了我的路线,改为使用
app.post | put | del()
来处理表单提交,然后使用带有
app.all()
的路线作为“一网打尽”。基本上,如果我遇到错误,我会调用
next()
,将控制权处理回我的“一网打尽”路线。这最终导致我偏离了我最初的宁静方式

现在,我已经设置了更准确地反映RESTful方法的路线。但是,如果我使用
app.redirect()
,数据将在重定向中丢失。我最终使用了另一个感觉像黑客的东西:
controller.new\u form.apply(这是参数)(这在
控制器.create()中调用)

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


express.js(或connect.js)是否有某种方法可用于在不同于表单本身的URI上接受表单操作,但允许我返回,而无需实际重定向浏览器,以便表单可以继续填充(以及显示错误消息)?

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

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

你可以尝试caolan的表单模块,该模块旨在简化表单。它应该允许您再次简单地调用form.toHTML()。此外,请停下来询问问题,以获得更快的响应:)