我编写了一个可以通过REST访问的Firebase云函数。代码如下所示。
我需要做的是,当用户通过'Web服务URL‘从前端提交一些值时。
1.)我需要这些数据保存在Firebase实时数据库中。
2.)我参考了网络上的几个教程,不明白var ref = db.ref("server/saving-data/fireblog");在下面的代码中做了什么。
const functions = require('firebase-functions');
const gcs = require('@google-cloud/storage')();
const os = require("os");
const path = require("path");
const cors = require("cors")({ origin: true });
var admin = require("firebase-admin");
var serviceAccount = require("./My-Service.json");
// Initialize the app with a service account, granting admin privileges
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://my-xx0xx.firebaseio.com/"
});
// As an admin, the app has access to read and write all data, regardless of Security Rules
var db = admin.database();
var ref = db.ref("server/saving-data/fireblog");
exports.uploadFile = functions.https.onRequest((req, res) => {
cors(req, res, () => {
var usersRef = ref.child("users");
usersRef.set({
alanisawesome: {
date_of_birth: "June 23, 1912",
full_name: "Alan Turing"
},
gracehop: {
date_of_birth: "December 9, 1906",
full_name: "Grace Hopper"
}
});
if (req.method !== 'POST') {
return res.status(500).json({
message: 'Not allowed'
});
}
res.status(200).json({
message: req.body
});
});
});

发布于 2018-05-07 19:25:33
您的代码确实在server节点(位置)下将数据写入数据库。数据库中的结果如下(从Firebase控制台导出):
"server" : {
"saving-data" : {
"fireblog" : {
"users" : {
"alanisawesome" : {
"date_of_birth" : "June 23, 1912",
"full_name" : "Alan Turing"
},
"gracehop" : {
"date_of_birth" : "December 9, 1906",
"full_name" : "Grace Hopper"
}
}
}
}
}所以,基本上,问题1的答案是:“它被保存了”。
问题2:值db.ref("server/saving-data/fireblog")是Reference的一个实例,它“代表数据库中的特定位置,可用于将数据读写到数据库位置”,参见https://firebase.google.com/docs/reference/js/firebase.database.Reference
var usersRef = ref.child("users");也是通过child()方法获得的引用,请参阅https://firebase.google.com/docs/reference/js/firebase.database.Reference#child
因此,通过组合初始引用和child()方法,在执行usersRef.set({})时,您将写入以下路径:server/saving-data/fireblog/users。这就是上面在数据库的导出中反映出来的。
请注意,使用当前代码,您将始终使用在该位置写入相同的数据,即:
{
alanisawesome: {
date_of_birth: "June 23, 1912",
full_name: "Alan Turing"
},
gracehop: {
date_of_birth: "December 9, 1906",
full_name: "Grace Hopper"
}
}同样,这也反映在数据库的导出中。
使用这样的云函数,您可以通过HTTPS调用,您将获得要写入HTTP请求正文中的数据库的数据。
最后一点:我会重新组织你的工作如下:
const db = admin.database();
const ref = db1.ref("server/saving-data/fireblog");
exports.uploadFile = functions.https.onRequest((req, res) => {
cors(req, res, () => {
const usersRef = ref.child("users");
if (req.method !== 'POST') {
return res.status(500).json({
message: 'Not allowed'
})
} else {
return usersRef.set({
alanisawesome: {
date_of_birth: "June 23, 1912",
full_name: "Alan Turing"
},
gracehop: {
date_of_birth: "December 9, 1906",
full_name: "Grace Hopper"
}
}).then(() => {
res.status(200).json({
message: req.body
});
}).catch(error => {
return res.status(500).send(error);
})
}
})
});最后,我建议你看看下面的视频:https://www.youtube.com/watch?v=7IkUgCLr5oA
https://stackoverflow.com/questions/50219139
复制相似问题