Облачные функции Firestore: невозможно прочитать свойство 'userId' из неопределенного - PullRequest
0 голосов
/ 09 мая 2018

Я не могу отправить приветственное письмо из облачных функций. Всякий раз, когда новый пользователь создается в моем firestore с коллекцией «Users» с путем 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)

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Нет необходимости получать нового пользователя, просматривая идентификатор пользователя в документах. Просто получите новый документ из оснастки.

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)
}
0 голосов
/ 09 мая 2018

Возможно, вы используете старую версию 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...