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 方法的主要内容,如果未能解决你的问题,请参考以下文章

每次在 Node.js (Express.js) 中发出 API 请求之前,如何简化 Fetching Auth token?

为啥我不能在 Socket.io http 服务器上使用 express.js 获取方法

存储 JWT 服务器端 express.js

如何避免在 express.js auth 中间件中捕获 HTTP OPTIONS 请求

Morgan Logger + Express.js:写入文件并在控制台中显示

如何在 express.js/passport-http-bearer 中撤销 express-jwt 令牌