使用API​​密钥的ExpressJS API调用

时间:2018-09-03 09:37:30

标签: node.js api express header

试图使我的代码井井有条。我有一个 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无法正常工作

1 个答案:

答案 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响应,但是可以是任何东西。