使用Express进行外部GET请求

7
我有以下情况:我有一个私密的 API 密钥,在 XHR 请求中 Angular 会将其显示。为了应对这个问题,我决定使用 Express 作为代理并进行服务器端请求。然而,我无法找到关于如何进行自己的 GET 请求的文档。
架构:
Angular 向 /api/external-api 发出请求 --> Express 处理路由并发送带有参数 req.body.params 和附加 API 密钥从 config.apiKeyexternalURL 的请求。以下是伪代码,模拟我要完成的内容:
router.get('/external-api', (req, res) => {
  externalRestGetRequest(externalURL, req.body.params, config.apiKey)
  res.send({ /* get response here */})
}

1
使用Node.js发送GET请求 - Kevin B
2
可能是Node.js Express中的HTTP GET请求的重复问题。 - Kevin B
2个回答

21

你已经完成了一半的进程!你需要一个工具来代替你发送请求。比如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 为控制台日志记录。 - Moshe
非常好的答案。谢谢!我们如何将请求放入一个函数中,并在路由器中等待它发送请求返回,以获得更清晰的代码? - Lucas P.
这已经被弃用了。 - 0xD1x0n

14

这个答案是不错的,但如果后来有人遇到这个问题,我们需要记住,截至2020年2月,request已经停用了。

那么我们该怎么办?我们可以使用另一个库。我建议使用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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接