首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >node js firestore函数记录错误-uid:无法在exports.observeMessages.functions.database.ref.onCreate读取未定义的属性‘TypeError’

node js firestore函数记录错误-uid:无法在exports.observeMessages.functions.database.ref.onCreate读取未定义的属性‘TypeError’
EN

Stack Overflow用户
提问于 2018-06-02 21:29:38
回答 1查看 363关注 0票数 0

我在firestore函数日志中收到此错误

索引:无法读取在exports.observeMessages.functions.database.ref.onCreate.event (/user_code/index.js.js:23:27)处未定义的属性'uid‘

下面是我的函数代码

代码语言:javascript
复制
  exports.observeMessages = functions.database.ref('/user-messages/{uid}/{fromId}/{messageId}')
.onCreate(event => {

var uid = event.params.uid;
var fromUid = event.params.fromId
var messageId = event.params.messageId

// let's log out some messages

console.log('User: ' + uid + 'was just messaged by: ' + fromId);



      //firestore - get users fcm token from firestore to send a push messaged


var Ref = db.collection('Users').doc(uid);
var getDoc = Ref.get()
.then(doc => {
  if (!doc.exists) {
  return console.log('No such document!');
  } else {
   console.log('Document data:', doc.data());


   var userUID = parseFloat(doc.data().uid);

      return console.log(userUID);
  }
})
.catch(err => {
  return console.log('Error getting document', err);
});
EN

回答 1

Stack Overflow用户

发布于 2018-06-03 04:38:58

您可能正在使用Firebase SDK for Cloud Functions的1.0.+版本,但您的代码使用的是旧语法( SDK <1.0的语法)。您可以在package.json文件中验证云函数的版本。

有关语法的更改,请参阅此文档项:https://firebase.google.com/docs/functions/beta-v1-diff

你应该像下面这样修改你的代码(请看前3行的"Here modify"):

代码语言:javascript
复制
exports.observeMessages = functions.database.ref('/user-messages/{uid}/{fromId}/{messageId}')
.onCreate((snap, context) => {

var uid = context.params.uid;  // <- Here modify
var fromUid = context.params.fromId  // <- Here modify
var messageId = context.params.messageId  // <- Here modify

// let's log out some messages

console.log('User: ' + uid + 'was just messaged by: ' + fromId);

      //firestore - get users fcm token from firestore to send a push messaged

var Ref = db.collection('Users').doc(uid);
return Ref.get(). // <- Here modify
.then(doc => {
  if (!doc.exists) {
     console.log('No such document!');  // <- Here modify 
      return false;  // <- Here modify 
  } else {
   console.log('Document data:', doc.data());


   var userUID = parseFloat(doc.data().uid);

      console.log(userUID);  // <- Here modify
      //return a promise like the one returned by the sendToDevice method 
      //See https://firebase.google.com/docs/reference/admin/node/admin.messaging.Messaging#sendToDevice

  }
})
.catch(err => {
  console.log('Error getting document', err);  // <- Here modify, no need to return anything here
});

请注意,您还应该修改代码的其他部分,而不仅仅是顶部的3行。事实上,你需要在你的云函数中返回一个promise。请再次使用“此处修改”注释查看上面的其他修改。

我亲切地(但强烈地:-)建议您观看来自Firebase团队的以下视频:https://www.youtube.com/watch?v=7IkUgCLr5oA&t=28shttps://www.youtube.com/watch?v=652XeeKNHSk,它们解释了这些关键概念。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50657410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档