好的,我查看了类似Firebase function onWrite not being called之类的问题,并认为获取参考是我的错,但我不知道Firebase功能在这里发生了什么。
我正在尝试在对数据库进行写入时获取写入数据库的函数。我完全按照了火焰基础教程:
const functions = require('firebase-functions');
// The Firebase Admin SDK to access the Firebase Realtime Database.
//https://firebase.google.com/docs/functions/database-events
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
// const gl = require('getlocation');
exports.helloWorld = functions.https.onRequest((request, response) => {
response.send("Hello from Firebase!");
});
exports.enterLocation = functions.database.ref('/Users/{name}') //brackets is client param
.onWrite(event => {
// Grab the current value of what was written to the Realtime Database.
// const original = event.data.val();
console.log('SKYLAR HERE:', event.params.name);
// You must return a Promise when performing asynchronous tasks inside a Functions such as
return firebase.database().ref('/Users/{name}').set({ location: 'test loc' });
});
该函数正在运行,但在我的日志中,我得到了一个非常无益的错误,它正在获取{name}参数,并且数据肯定写入我的数据库,但是我的SERVER代码没有写入:
我明白了 -
ReferenceError:未定义firebase exports.enterLocation.functions.database.ref
因为它被定义没有任何意义。我只想在我创建的用户下添加一个额外的孩子,就像我已经使用“密码”
一样我做错了什么?
答案 0 :(得分:1)
而不是:
return firebase.database().ref('/Users/{name}').set({ location: 'test loc' });
使用它:
return admin.database().ref('/Users/{name}').set({ location: 'test loc' });
答案 1 :(得分:1)
这里有两个问题。首先,您尚未在代码中的任何位置定义firebase
。我认为您打算使用admin
来使用Admin SDK。
其次,看起来你正在尝试对字符串进行变量插值以构建ref的名称。你的语法错了。
我想你在最后一行代码中试图说出这个:
return admin.database().ref(`/Users/${name}`).set({ location: 'test loc' });
注意字符串引号上的反引号。该JavaScript语法允许您使用${exp}
在字符串中插入某个表达式的内容。
事实证明,您甚至不需要在此处使用管理员SDK。由于您尝试写回触发该函数的同一位置,因此您可以使用来自事件对象的ref:
return event.data.adminRef.set({ location: 'test loc' });