试图保持我的代码组织。我有一个控制器目录和路由器目录。目标是进行api调用并检索数据。
CONTROLLER
function searchName(req, res) {
res.setHeader("user-key", process.env.APIKEY)
res.redirect(`https://api-endpoint.igdb.com/games/?search=${req.params.game}&fields=*`)
}
路由器
router.get('/search/:game', Controller.searchName)
我导出路由器,并在我的server.js文件中要求它。在POSTMAN中,这很好用;我确实在Postman中对我的API密钥进行了硬编码。我尝试了很多不同的方法,但在代码中发出初始请求时似乎无法用我的ApiKey传递标题。另外,作为nodejs的新用户,我不确定在这种情况下请求重定向是否足够。最终,setHeader无法正常工作
听起来你正试图对另一个服务进行异步调用,撤回一些数据,然后将其发送回调用你服务的客户端。在nodejs应用程序中,发出新的HTTP请求非常简单。 Nodejs有一个内置的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发出请求,然后我们等待“promise”(这是一个异步的javascript概念,如果你以前没遇到它),那么我们采取从那里回应并将其作为res
转发回来。让我们假装这是一个JSON响应,但它可能是任何东西。