使用Express进行外部获取请求

Mos*_*she 2 node.js express

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

建筑:

Angular请求/api/external-api- > Express处理路由并向externalURLparams 发出请求req.body.params并附加API密钥config.apiKey.以下是伪模式来模仿我想要完成的事情:

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

小智 15

你在中途!您需要一些东西来为您提出要求.比如npm库请求.

在你的路线中

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)
    });

})
Run Code Online (Sandbox Code Playgroud)

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


Esk*_*eus 5

接受的答案很好,但如果以后有人遇到这个问题,请记住,自 2020 年 2 月起,请求现已弃用。

所以,我们能做些什么?我们可以使用另一个库。我会建议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)
Run Code Online (Sandbox Code Playgroud)