Express 和 Nodejs:调用外部 API 的最佳方式
Posted
技术标签:
【中文标题】Express 和 Nodejs:调用外部 API 的最佳方式【英文标题】:Express and Nodejs : Best way to call an external API 【发布时间】:2014-10-09 09:00:35 【问题描述】:我是 Express 和 Nodejs 的新手。我正在尝试调用外部 api 来在页面上构建数据。有没有办法从 express 本身调用外部 api(我知道我可以使用 http 模块来做到这一点)但想确认这是最好的方法。同样,一旦我将 json 取回,我如何将其传递给视图。
现在我已经通过使用 express 加载视图(只是标题)并对 api 进行 jquery ajax 调用并填充数据来完成解决方法。
【问题讨论】:
什么 API?一些 API 为 Node 构建了特定的库,您可以使用它们来连接到服务。通常你可以只用谷歌搜索“$API Node API”。 【参考方案1】:首先,您需要在要填充它的控制器内部调用外部 API。最好是使用 http
模块,它很容易使用 http://nodejs.org/docs/v0.4.10/api/http.html#http.get 。获取数据后,只需将其传递给视图,如下所示:
http.get(options, function(data)
res.render('template', data);
);
【讨论】:
谢谢,但是如果我想递归调用外部 Api 来填充列表怎么办。我应该创建一个库并使用它来递归调用。然后我必须合并所有数据响应以得出最终响应? 如果其中一个请求失败或返回损坏的数据怎么办,我会得到其他请求的响应吗? @SaNmm 和async.map()
您为数组中的每个 url 应用相同的函数。您将自己形成最终结果
是的,我已经做到了,它在请求返回 json 时工作,但如果任何一个请求失败/或返回错误数据,整个异步调用都会失败并出现错误。有没有办法只接受一个请求并开始其他响应【参考方案2】:
我会编写一个对象来隐藏此数据获取(http 请求)的详细信息,并使用 superagent 进行 http 调用(只是因为它是一个不错的库)。
这样你可以:
如果您决定使用其他东西,请稍后替换 http 请求。 按照 monkeyinsight 的建议隐藏细节,例如使用 node-async。【讨论】:
以上是关于Express 和 Nodejs:调用外部 API 的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章
使用异步和请求包(NodeJS / Express)进行多个 API 调用
使用nodejs和rest api调用和express进行异步处理-序列错误