我想使用 AngularJS 应用程序中的按钮向 NodeJS 发出客户端 HTTP 请求,然后从 NodeJS 内部向第 3 方 API 发出多个服务器端 HTTP 请求。我在向第 3 方 API 发出多个 HTTP 请求时遇到问题。我正在使用 AngularJS 1.5。
myController.js
function onClick() {
return MyAngularService.lookup()
.then(function(response) {
console.log(response)
})
}
my-angular-service.js
function lookup() {
return $http({
method: 'GET',
url: '/lookup’
})
}
lookup-route.js
const rp = require('request-promise')
const Promise = require('bluebird')
const router = require('express').Router()
router.get('/lookup', lookup)
function lookup(req, res, next) {
const urls = ['https://jsonplaceholder.typicode.com/todos/1', 'https://jsonplaceholder.typicode.com/todos/2']
const doRequest = function(url) {
return rp(url)
.then(function(response) {
return res.json(response)
})
}
const requests = [];
for (let i=0; i < urls.length; i++) {
const url = urls[i]
requests.push(doRequest(url))
}
return Promise.all(requests)
.then(res.json(requests))
}
当我在 myController.js
中 console.log(response.data)
时,我得到 {isFulfilled: false, isRejected: false}
对于我想从中获取数据的每个第三方网址。
如何将 JSON 从 3rd 方 API 返回到我的 Controller ?
最佳答案
服务器端代码中我想到的是:
- 在每个“doRequest”函数内发送
res.json
(这意味着您将从第 3 方 API 获取一个响应 - 以先满足者为准) - 通过执行
.then(res.json(requests))
链接到 Promise.all 方法的末尾,这会导致回调提前运行;而不是做类似.then(res.json)
或.then(function(data){ return res.json(data); })
尝试更新快速路线的实现--
const rp = require('request-promise')
const router = require('express').Router()
router.get('/lookup', lookup)
function lookup(req, res) {
const urls = ['https://jsonplaceholder.typicode.com/todos/1', 'https://jsonplaceholder.typicode.com/todos/2']
// map the array of urls to an array of promises
const promisesArray = urls.map(function(url){
return rp(url);
});
// once all promises are fulfilled, return array of data as json response
Promise.all(promisesArray).then(function(responseArray){
return res.json(responseArray)
});
}
关于javascript - 将服务器端多个 HTTP 请求快速路由到第 3 方 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55461652/