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

8ehkhllq  于 2023-03-24  发布在  Go
关注(0)|答案(1)|浏览(150)

我正在使用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);
});

});
kxe2p93d

kxe2p93d1#

你应该在你的Cloud Function中使用promise来处理异步任务。默认情况下,request不返回promise,所以你需要为请求使用接口 Package 器,比如request-promise,它“返回一个常规的Promises/A+兼容的promise”,如下所示:

....
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”计划“只允许出站网络请求到谷歌拥有的服务”。
由于https://api.shipengine.com不是Google拥有的服务,因此您需要切换到“Flame”或“Blaze”计划。
关于你必须使用promise来处理异步任务的事实,我建议你观看Firebase团队的以下视频:https://www.youtube.com/watch?v=7IkUgCLr5oA&t=28shttps://www.youtube.com/watch?v=652XeeKNHSk,它们解释了这个关键概念。

相关问题