如何使用Google Cloud函数在url中传递参数

时间:2019-02-01 08:01:47

标签: android firebase google-cloud-firestore google-cloud-functions

我正在使用http调用来调用云功能。 我有一个网址,形式为
网址:“ https://api.shipengine.com/v1/labels/rates/rateid

现在,每当函数调用发生时,我就需要动态地传递额定值。 如何将值传递到该URL。 我也要附加我的云功能。

exports.shipmentlabelwithreturnid = functions.https.onRequest((req, res) => {

var request = require("request");


var rateid = req.body.RateId;
  console.log(rateid);

var options = { method: 'POST',
  url: 'https://api.shipengine.com/v1/labels/rates/'+ rateid,
  headers: 
   { 'content-type': 'application/json',
     accept: 'application/json' 
   } 
 };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});

});

1 个答案:

答案 0 :(得分:1)

您应该在Cloud Function中使用Promise处理异步任务。默认情况下,request不返回承诺,因此您需要使用接口包装程序进行请求,例如request-promise,它“返回常规的Promises / A +兼容承诺”,如下所示:

....
const rp = require('request-promise');

exports.shipmentlabelwithreturnid = functions.https.onRequest((req, res) => {

  var rateid = req.body.RateId;
  console.log(rateid);

  var options = { method: 'POST',
     uri: 'https://api.shipengine.com/v1/labels/rates/'+ rateid,
     headers: 
        { 'content-type': 'application/json',
         accept: 'application/json' 
     } 
  };

  rp(options)
    .then(response => {
      console.log('Get response: ' + response.statusCode);
      res.send('Success');
    })
    .catch(err => {
      // API call failed...
      res.status(500).send('Error': err);
    });

});

此外,请务必注意您需要使用“火焰”或“烈火”定价计划。

事实上,免费的“ Spark”计划“仅允许对Google拥有的服务进行出站网络请求”。请参见https://firebase.google.com/pricing/(将鼠标悬停在“云函数”标题之后的问号上)

由于https://api.shipengine.com不是Google拥有的服务,因此您需要切换到“火焰”或“大火”计划。


关于必须使用promise处理异步任务这一事实,我建议您观看Firebase团队的这些视频:https://www.youtube.com/watch?v=7IkUgCLr5oA&t=28shttps://www.youtube.com/watch?v=652XeeKNHSk,它们解释了这一关键概念。