Firebase 函数 - ReferenceError:未定义事件

Posted

技术标签:

【中文标题】Firebase 函数 - ReferenceError:未定义事件【英文标题】:Firebase Functions - ReferenceError: event is not defined 【发布时间】:2019-04-26 17:06:07 【问题描述】:

我正在尝试做一个简单的通知功能 但每次我触发该功能时,我都会收到错误

TypeError:无法读取未定义的属性“参数” 在exports.sendNotification.functions.database.ref.onWrite (/user_code/index.js:23:32) 在 cloudFunctionNewSignature (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:105:23) 在 cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:135:20) 在 /var/tmp/worker/worker.js:758:24 在 process._tickDomainCallback (internal/process/next_tick.js:135:7)

或者我得到错误

TypeError:无法读取未定义的属性“user_id”

我得到了here的答复

但我根本没有帮助,而且我找不到问题所在。这是我的代码

'use strict'
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.sendNotification = functions.database.ref('/notifications/user_id/notification_id').onWrite((change,context) => 

const user_id = event.params.user_id;
const notification_id = event.params.notification_id;

console.log('We have a notification from : ', user_id);

if(!context.data.val())

return console.log('A Notification has been deleted from the database : ', 
notification_id);



const fromUser =admin.database().ref(`/notifications/$user_id/$notification_id`).once('value');

return fromUser.then(fromUserResult => 

const from_user_id = fromUserResult.val().from;

console.log('You have new notification from  : ', from_user_id);

const userQuery = admin.database().ref(`Users/$from_user_id/name`).once('value');
const deviceToken = admin.database().ref(`/Users/$user_id/device_token`).once('value');

return Promise.all([userQuery, deviceToken]).then(result => 

  const userName = result[0].val();
  const token_id = result[1].val();

  const payload = 
    notification: 
      title : "New Friend Request",
      body: `$userName has sent you request`,
      icon: "default",
      click_action : "none"
    ,
    data : 
      from_user_id : from_user_id
    
  ;

  return admin.messaging().sendToDevice(token_id, payload).then(response => 

    return console.log('This was the notification Feature');

     );

   );

  );

);

【问题讨论】:

***.com/questions/49746905/… ***.com/questions/49647170/… 【参考方案1】:

你从未定义过event,所以它是未定义的。您正在尝试访问未定义变量的属性。你是说context.params.user_id吗?

(您可能使用的是过时的教程。我在 Stack Overflow 上经常看到类似的糟糕的“sendNotification”函数。请告诉作者。)

【讨论】:

我应该在哪里定义它,我读到了这个事件,现在不能使用它 这就是为什么我建议你改用context 应该怎么用,能不能写个使用代码? 你看这里onWrite((change, context)我根本没有使用该事件,我将用户ID定义为const user_id = context.params.user_id;

以上是关于Firebase 函数 - ReferenceError:未定义事件的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 云函数对另一个 Firebase 云函数的 http 请求

Firebase 函数执行和订阅由 firebase 函数更新的列表

Firebase 可调用函数未接收参数

Vue Firebase firebase/auth 不工作,但 firebase/firestore 工作正常。 “身份验证不是函数”

从被 CORS 阻止的 Firebase 托管代码调用 Firebase 函数

使用 Firebase 函数获取上传到 Firebase 存储的 pdf 的签名下载 URL