我是firebase的新手,当我运行我的函数时,我会收到错误:
Object is possibly 'null'.
console.log(snapshot.val());
,有人能查看我的代码并帮助我解决这个问题吗
这是我的代码
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
let serviceAccount = require("../src/serviceAccountKey.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://******.com"
});
let db = admin.database();
exports.helloWorld = functions.https.onRequest((req, res) => {
res.send("Hello from Firebase!");
});
exports.groups_list = functions.https.onRequest((req, res) => {
/*let data = {};
data['status'] = '1';
data['groups'] = ["Montreal","Outremont","Saint-Eustache","Sherbrooke"];
res.send(data);*/
let groups = db.ref('groups');
groups.on('value', function(snapshot) {
const data = snapshot.val();
console.log(data);
});
});
正如您在文档中看到的,"如果位置(连接侦听器的位置(没有数据,它将用空的DataSnapshot触发(val((将返回null("。
因此,您需要在代码中检查snapshot.val()
是否为null
。
但是,请注意,在云函数中使用on()
不是推荐的方式,因为云函数的使用寿命有限。
您应该使用once()
方法,该方法"只侦听指定事件类型的一个事件,然后停止侦听。">
exports.groups_list = functions.https.onRequest((req, res) => {
const groups = db.ref('groups');
groups.once('value')
.then(snapshot => {
if (snapshot.val()) {
console.log(snapshot.val());
res.send(snapshot.val()) //For example
} else {
res.status(204).send('No content'));
}
})
.catch(error => res.status(500).send('....'));
});
您可能会对官方系列视频感兴趣,特别是HTTPS云功能的第一个视频。