如何在Firebase函数中编写Javascript GET请求?

时间:2018-05-26 19:16:53

标签: javascript firebase ecmascript-6 google-cloud-functions

我正在尝试编写一个简单的GET请求,该请求返回https://hacker-news.firebaseio.com/v0/item/160705.json

处的JSON数据

我尝试过很多东西,似乎没什么用。 (我在付费的Firebase计划中允许向外部API提出请求)。我编写该函数,然后运行firebase deploy并执行该函数,但它会超时或抛出另一个错误。

作为测试,这个简单的HTTP调用工作正常:

exports.helloWorld = functions.https.onRequest((request, response) => {
  response.send('test');
})

但是当我尝试运行以下命令时,点击HN API,它会超时:

exports.helloWorld = functions.https.onRequest((request, response) => {
  request.get('https://hacker-news.firebaseio.com/v0/item/160705.json', function (error, res, body) {
    if (!error && res.statusCode == 200) {
      console.log(body) // Print the google web page.
    }
    return response.send("") // this terminates the function
  })
})

修改

上述功能的firebase日志说: Function execution started Function execution took 60002 ms, finished with status: 'timeout'

我还尝试过其他一些事情,例如:

const options = {
  host: 'hacker-news.firebaseio.com',
  path: '/v0/item/160705.json'
};

// make the request
exports.hackerNews = functions.https.onRequest(options, (resp) => {
  console.log(resp)
});

但是500 Error: could not handle the requestReferrer Policy: no-referrer-when-downgrade

失败了

在firebase函数中写一个简单的GET请求应该不难,所以我必须做一些愚蠢的事情。感谢。

1 个答案:

答案 0 :(得分:1)

我明白了:

exports.helloWorld = functions.https.onRequest((req, res) => {
  request.get('https://hacker-news.firebaseio.com/v0/item/160705', (error, response, body) => {
    if (!error && response.statusCode === 200) {
      return res.send(body);
    }
    return res.send('ERROR: ' + error.message);
  })
});

显然你必须在成功或错误时返回一些内容,你只能执行另一个函数,如console.log()。