使用 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=var
与api.rubyapp.com/v1/something?get=var
相关)。我也不完全清楚查询字符串会发生什么(特别是如果我有 GET 和 POST 参数的混合)以上是关于使用 Express JS .all() 方法:检测实际使用了哪个 VERB的主要内容,如果未能解决你的问题,请参考以下文章