试图使我的代码井井有条。我有一个 controller 目录和 router 目录。目标是进行api调用并检索数据。
控制器
ReadCommitted
ROUTER
function searchName(req, res) {
res.setHeader("user-key", process.env.APIKEY)
res.redirect(`https://api-endpoint.igdb.com/games/?search=${req.params.game}&fields=*`)
}
我导出路由器,并在我的 server.js 文件中要求它。在POSTMAN中,这很好用;我的API密钥确实用Postman硬编码。我尝试了许多不同的方法,但是在代码中发出初始请求时似乎无法通过ApiKey传递标头。此外,由于是NodeJS的新手,所以我不确定在这种情况下请求重定向是否足够。最终, setHeader无法正常工作
答案 0 :(得分:0)
听起来您正在尝试对另一个服务进行异步调用,回拉一些数据,然后将其发送回调用您服务的客户端。在nodejs应用程序中,发出新的HTTP请求非常简单。 Node.js具有内置的HTTP.Agent,但是我建议尝试axios库,因为它使它变得更加容易。这将导致如下结果:
const axios = require('axios');
function searchGame(req, res) {
const requestOptions = {
method: 'GET',
uri: `https://api-endpoint.igdb.com/games/?search=${req.params.game}&fields=*`,
headers: {
"user-key": process.env.API_KEY
}
}
axios.get(requestOptions)
.then(function (response) {
// This is the data the remote service gave back
res.send(response.data);
})
.catch(function (error) {
// The remote gave an error, lets just forward that for now
res.send({error: error});
});
}
在这里我们从req对象构建axios请求,我们使用axios.get发出请求,然后等待“承诺”(如果您之前没有遇到过,这是一个异步javascript概念),然后我们从中获取响应并将其转发回res
。为了争辩,让我们假装这是一个JSON响应,但是可以是任何东西。