我正在使用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);
});
});
答案 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=28s和https://www.youtube.com/watch?v=652XeeKNHSk,它们解释了这一关键概念。