使用Express进行外部获取请求

时间:2017-05-04 15:46:54

标签: node.js express

所以我有以下场景;我有一个私有API密钥,Angular将在XHR请求中显示。为了解决这个问题,我决定使用Express作为代理并提出服务器端请求。但是,我似乎无法找到有关如何发出自己的请求的文档。

架构:

Angular请求/api/external-api - > Express处理路由,并使用externalURL中的参数向req.body.params发出请求,并附加config.apiKey的API密钥。以下是伪模仿我想要完成的事情:

router.get('/external-api', (req, res) => {
  externalRestGetRequest(externalURL, req.body.params, config.apiKey)
  res.send({ /* get response here */})
}

2 个答案:

答案 0 :(得分:10)

你在中途!您需要一些东西来为您提出要求。例如npm库request

在您的路线中

var request = require('request');


router.get('/external-api', function(req, res){ 

    request('http://www.google.com', function (error, response, body) {
          console.log('error:', error); // Print the error if one occurred and handle it
          console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
          res.send(body)
    });

})

这允许您使用所需的任何URL或API密钥进行任何类型的请求。但是,请务必注意您还需要处理任何错误或错误的响应代码。

答案 1 :(得分:3)

可接受的答案很好,但是如果以后有人遇到这个问题,请记住,截至2020年2月,request现在为deprecated

那我们该怎么办?我们可以使用另一个库。我建议Axios

安装并执行以下操作:

const axios = require('axios')


const url = "https://example.com"

const getData = async (url) => {
  try {
    const response = await axios.get(url)
    const data = response.data
    console.log(data)
  } catch (error) {
    console.log(error)
  }
}

getData(url)