Express.js 在控制器中获取 http 方法

Posted

技术标签:

【中文标题】Express.js 在控制器中获取 http 方法【英文标题】:Express.js get http method in controller 【发布时间】:2012-06-25 10:56:34 【问题描述】:

我正在构建一个注册表单(本地护照作为身份验证,表单作为表单助手)。

因为注册只知道 GET 和 POST 我想在一个函数中完成整个处理。

换句话说,我正在寻找类似的东西:

exports.register = function(req, res)
    if (req.isPost) 
       // do form handling
    
    res.render('user/registration.html.swig',  form: form.toHTML() );
;

【问题讨论】:

【参考方案1】:

现在你可以在 npm => "method-override" 中使用一个包,它提供了一个覆盖 "req.method" 属性的中间件层。

基本上,您的客户端可以发送带有修改后的“req.method”的 POST 请求,例如 /registration/passportID?_method=PUT

?_method=XXXXX

部分用于让中间件识别这是一个秘密 PUT 请求。

流程是客户端发送一个带有数据的POST请求到你的服务器端,中间件翻译请求并运行相应的“app.put...”路由。

我认为这是一种妥协的方式。欲了解更多信息:method-override

【讨论】:

【参考方案2】:

答案很简单

exports.register = function(req, res) 
    if (req.method == "POST") 
       // do form handling
    
    res.render('user/registration.html.swig',  form: form.toHTML() );
;

但是我在快速指南中搜索了很长时间。

最后节点文档有这样详细的信息: http://nodejs.org/api/http.html#http_http_request_options_callback

【讨论】:

对。可惜express.js文档在这里expressjs.com/api.html#req.params漏掉了这些东西,也没有参考NodeJS内置库的文档,确实有必要。 您好,感谢您发布此解决方案。不过,对我来说,为了使您在此处列出的逻辑正常工作,我必须以这种方式制作我的 IF 语句:if (req.method != 'GET') 比较字符串时最好使用三等号而不是双等号

以上是关于Express.js 在控制器中获取 http 方法的主要内容,如果未能解决你的问题,请参考以下文章