【问题标题】:Firestore cloud functions : cannot read property 'userId' of undefinedFirestore 云功能:无法读取未定义的属性“userId”
【发布时间】:2018-05-09 10:08:24
【问题描述】:

我无法从云功能发送欢迎电子邮件。每当在我的 Firestore 中创建一个新用户时,使用路径为 Users/userId 的“用户”集合。这是我的函数

        exports.welcomeEmail = functions.firestore.document('Users/{userId}')
.onCreate((snap, context)=>{
    const userId = context.params.userId;

    const db = admin.firestore()

    return db.collection('Users').doc(userId)

    .get()
    .then(doc => {

        const user = doc.data()

        const msg = {
            to: user.email,
            from: 'cybertronjc3@gmail.com',
            subject: 'Welcome to COFOZ',

            templateId: '1c455865-4529-4ae1-8e5a-9a5b8eaf0157',
            substitutionsWrappers: ['{{', '}}'],
            substitutions: {
                name: user.name
            }
        };

        return sgMail.send(msg)

    })
    .then(() => console.log('email sent!'))
    .catch(err => console.log(err))
})

这是我遇到的错误。

TypeError: Cannot read property 'userId' of undefined
    at exports.welcomeEmail.functions.firestore.document.onCreate.event (/user_code/index.js:19:32)
    at Object.<anonymous> (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:112:27)
    at next (native)
    at /user_code/node_modules/firebase-functions/lib/cloud-functions.js:28:71
    at __awaiter (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:24:12)
    at cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:82:36)
    at /var/tmp/worker/worker.js:710:26
    at process._tickDomainCallback (internal/process/next_tick.js:135:7)

【问题讨论】:

    标签: firebase cloud google-cloud-firestore google-cloud-functions


    【解决方案1】:

    无需通过文档中的用户 ID 来获取新用户。只需从 snap 中获取新创建的文档。

    exports.welcomeEmail = functions.firestore.document('Users/{userId}')
    .onCreate((snap, context)=>{
      const user = snap.data();
      const msg = {
            to: user.email,
            from: 'cybertronjc3@gmail.com',
            subject: 'Welcome to COFOZ',
            templateId: '1c455865-4529-4ae1-8e5a-9a5b8eaf0157',
            substitutionsWrappers: ['{{', '}}'],
            substitutions: {
                name: user.name
            }
      return sgMail.send(msg)
    }
    

    【讨论】:

      【解决方案2】:

      您可能使用的是旧版本的 Cloud Functions SDK。您可以在“依赖项”节点下的package.json 文件中查看您正在使用的版本吗?

      使用您在代码中使用的语法,您应该有一个等于或高于 1.0.0 的版本。

      有关详细信息,请参阅此文档(迁移指南):https://firebase.google.com/docs/functions/beta-v1-diff 并检查 package.json 文件中的版本。

      您会看到要更新到新的 SDK,您应该这样做:

      npm install firebase-functions@latest --save

      npm install firebase-admin@5.11.0 --save

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-03
        • 2018-12-05
        • 2020-05-18
        • 2021-07-15
        • 1970-01-01
        • 1970-01-01
        • 2015-10-22
        • 1970-01-01
        相关资源
        最近更新 更多