使用 Express JS .all() 方法:检测实际使用了哪个 VERB

Posted

技术标签:

【中文标题】使用 Express JS .all() 方法:检测实际使用了哪个 VERB【英文标题】:Use Express JS .all() method: detect which VERB was actually used 【发布时间】:2012-10-09 08:25:03 【问题描述】:

我将创建一个 /api 端点,将请求和响应盲目地代理到传统 RESTful API 系统(用 Ruby 编写并托管在不同的域中)。

这是一个中间过渡步骤,所以应该可以正常工作。

所以,我知道使用app.all() 可以轻松实现这一目标。但是由于 API 是 RESTful 的,我还必须维护用于请求的 HTTP 动词 - 那么,我可以从 req 对象中检测到它吗?如果没有,我当然可以为 GET、PUT、POST、DELETE、OPTIONS 订阅 5 个处理程序,但最好避免这种情况。

另外,我应该如何处理请求正文(查询字符串和有效负载)? 我假设我需要从解析的req.query 手动重新创建查询字符串,并将req.body 按原样传递给request https://github.com/mikeal/request - 对吗?

【问题讨论】:

【参考方案1】:

我猜你们都需要req.method。并处理body,添加express.bodyParser()中间件。

【讨论】:

关于如何处理 GET 和 POST 参数的任何建议? GET 参数是 req.query。后参数是 req.body (如果用中间件解析)。你检查过 expressjs 指南吗? 我有 bodyParser,但我担心的是(见票证):1)我是否应该从解析的查询中重新创建查询字符串并将其添加到 URL,和 2) 我应该将 parsed 正文传递给request吗? 好吧,在这种情况下,可能 express 不是您的最佳解决方案,为什么不直接使用 nodejs http.createServer 并在 req 对象中获取所有纯数据? 因为这个项目不仅仅适用于 API(否则为什么会有这样一个普通的代理?:)【参考方案2】:

如果您只想传递请求并返回响应,那么您正在寻找代理

我建议您查看node-http-proxy。只需加载代理库,初始化代理,代理所有请求。

【讨论】:

看起来很有希望。但也有细微差别。远端有不同的结构(nodeapp.com/api/v1/something?get=varapi.rubyapp.com/v1/something?get=var 相关)。我也不完全清楚查询字符串会发生什么(特别是如果我有 GET 和 POST 参数的混合)

以上是关于使用 Express JS .all() 方法:检测实际使用了哪个 VERB的主要内容,如果未能解决你的问题,请参考以下文章

express源码剖析

Express.js 路由:可选的 splat 参数?

Express.js 路由:可选的 splat 参数?

js通用方法检測浏览器是否已安装指定插件(IE与非IE通用)

node.js express配置允许跨域

nodejs的express使用介绍