所以我有以下场景;我有一个私有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 */})
}
答案 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)