0

我尝试使用在 node.js 8.1 上运行的 lambda 从 alexa 后端代码访问外部 API,该代码可以访问任何不需要 api-key 的端点,但我找不到包含我的授权(api-key ) 在代码中,以便我可以检索我正在寻找的数据。我试图访问的api文档如下:

curl --request GET -H 'Authorization: Bearer' -H 'Content-Type: application/json' " https://some-end-point/path/i/want "

这适用于 alexa-skills-kit,它在调用技能后使用 lambda 并尝试使用 api-key 访问外部 api。代码可以将信息检索到不需要任何密钥的任何端点。我已经尝试将密钥作为参数包含在 URL(api 密钥 + URL)中,因为我是 alexa、lambda、nodejs 的新手,我不知道如何调试它,但我只是没有得到想要的输出(这是 alexa 转动文本与从外部 api 获得的信息进行对话)。

pd:假设我的 api 密钥是:xxxx-xxxx-xxxx

// endpoint that i want
url = https://some-end-point/path/i/want

await getRemoteData(url)
      .then((response) => {
        const data = JSON.parse(response);
        outputSpeech = `the data thati want is ${data.records.length} `;
        for (let i = 0; i < data.records.length; i++) {
          if (i === 0) {
            //first record
            outputSpeech = outputSpeech + data.records[i].fields.name + ', '
          } else if (i === data.records.length - 1) {
            //last record
            outputSpeech = outputSpeech + 'y '+data.records[i].fields.name + 
             ', '
          } else {
            //middle record(s)
            outputSpeech = outputSpeech + data.records[i].fields.name + ', '
          }
        }
      })



//function getRemoteData
const getRemoteData = function (url) {
  return new Promise((resolve, reject) => {
    const client = url.startsWith('https') ? require('https') : require('http');
    const request = client.get(url,(response) => {
      if (response.statusCode < 200 || response.statusCode > 299) {
        reject(new Error('Failed with status code: ' + response.statusCode));
      }
      const body = [];
      response.on('data', (chunk) => body.push(chunk));
      response.on('end', () => resolve(body.join('')));
    });
    request.on('error', (err) => reject(err))
  })
};

上面的代码可以无错误地访问任何端点,但我不知道如何包含 api 密钥以便它可以访问 api,预期的输出是通过包含 api-key 来访问 api

任何关于这个问题的帮助都会很高兴从这个新手那里得到帮助......

4

1 回答 1

0

您需要传递一个options对象作为client.get. 例如:

const options = {
  headers: {
    'Authorization': 'Bearer <your API key>'
  }
}

然后你在哪里提出请求:

const request = client.get(url, options, (response) => {
  // Do the rest of your stuff here...  
}

您可以在options 此处找到更多详细信息。

于 2019-07-16T13:05:27.753 回答