【问题标题】:Cloud Function Firebase, error sending value backCloud Function Firebase,返回值时出错
【发布时间】:2017-10-21 15:00:06
【问题描述】:
我正在尝试从 firebase 发回简单值,但出现如下错误
我的代码是:
exports.getTotalPrice = functions.https.onRequest((req, res) => {
admin.database().ref('carresult').once('value').then(function(snapshot) {
var totalPrice = snapshot.val().price;
res.status(200).send(totalPrice);
});
});
ps。错误 65000 是我需要它发回的值。
【问题讨论】:
标签:
firebase
httprequest
google-cloud-functions
【解决方案1】:
Express documentation for res.send([body]) 表示:
body 参数可以是 Buffer 对象、String、对象或
数组
在您的数据库中,/carresult/price 可能存储为一个数字,从而使totalPrice 成为send() 的无效参数。您的选择是将其存储为String,然后将其转换为String,然后再传递给send(),或者留下一个数字并将其作为对象的属性发送回:send({price: totalPrice})。
exports.getTotalPrice = functions.https.onRequest((req, res) => {
admin.database().ref('carresult').once('value').then(function(snapshot) {
var totalPrice = snapshot.val().price;
res.status(200).send(String(totalPrice)); // <= ADDED String()
});
});
另请注意,在 HTTPS 函数中执行数据库读取(异步)是有风险的,正如 Frank van Puffelen 在 this answer 中解释的那样:
请注意,这是一个棘手的模式。对数据库的调用发生
异步的,可能需要一些时间才能完成。在等待时
即,HTTP 函数可能会超时并被 Google 终止
Cloud Functions 系统...作为一般规则,我建议使用 Firebase 数据库 SDK 或其 REST API 来访问数据库,而不是依赖 HTTP 函数作为中间件。