javascript - 将服务器端多个 HTTP 请求快速路由到第 3 方 API

标签 javascript node.js angularjs express request-promise

我想使用 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.jsconsole.log(response.data) 时,我得到 {isFulfilled: false, isRejected: false}对于我想从中获取数据的每个第三方网址。

如何将 JSON 从 3rd 方 API 返回到我的 Controller ?

最佳答案

服务器端代码中我想到的是:

  1. 在每个“doRequest”函数内发送 res.json(这意味着您将从第 3 方 API 获取一个响应 - 以先满足者为准)
  2. 通过执行 .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/

相关文章:

javascript - 防止表单刷新页面

javascript - `innerText` 在 Mozilla Firefox 中未定义

javascript - 使用所有对象属性键的 AngularJS ng-options

javascript - 使用 mongoskin 对 mongodb 进行单个查询或多个查询???

javascript - 什么时候使用vue-route,什么时候使用express Route?

javascript - 有什么方法可以调用 $q 通知而不引起 $digest 循环吗?

javascript - 电子表格的 Google 脚本(If 语句)

javascript - Node.js + Express + MySQL 作为文档存储(结果)

angularjs - Angular 日期选择器翻译

javascript - REST Node 服务器有时会运行两次代码