Firebase功能.onWrite不工作?

时间:2017-11-20 23:13:18

标签: javascript firebase firebase-realtime-database google-cloud-functions

好的,我查看了类似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代码没有写入:

enter image description here

我明白了 -

  

ReferenceError:未定义firebase   exports.enterLocation.functions.database.ref

因为它被定义没有任何意义。我只想在我创建的用户下添加一个额外的孩子,就像我已经使用“密码”

一样

enter image description here

我做错了什么?

2 个答案:

答案 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' });