Ошибка облачной функции "Не удается прочитать свойство 'данные' из неопределенного" - PullRequest
0 голосов
/ 12 марта 2020

Я недавно начал играть с облачными функциями и получаю эту ошибку:

> TypeError: Cannot read property 'data' of undefined
>     at exports.createPost.functions.firestore.document.onCreate (/srv/index.js:15:37)
>     at cloudFunction (/srv/node_modules/firebase-functions/lib/cloud-functions.js:131:23)
>     at /worker/worker.js:825:24
>     at <anonymous>
>     at process._tickDomainCallback (internal/process/next_tick.js:229:7)

, и это мой код

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const algoliasearch = require('algoliasearch');

const ALGOLIA_APP_ID = "";
const ALGOLIA_ADMIN_KEY = "";
const ALGOLIA_INDEX_NAME = "Posts";

admin.initializeApp(functions.config().firebase);
//const firestore = admin.firestore;

exports.createPost = functions.firestore
    .document('User/{UserId}/Posts/{PostsID}')
    .onCreate( async (snap, context) => {
        const newValue = snap.after.data();
        newValue.objectID = snap.after.id;

        var client = algoliasearch(ALGOLIA_APP_ID, ALGOLIA_ADMIN_KEY);

        var index = client.initIndex(ALGOLIA_INDEX_NAME);
        index.saveObject(newValue);
    });

Функция onCreate срабатывает в нужное время, и проблема только ошибка. Я сделал свое исследование и не мог понять это. Я надеюсь, что смогу получить некоторую помощь.

Заранее спасибо:).

1 Ответ

2 голосов
/ 12 марта 2020

onCreate функции получают аргумент типа DocumentSnapshot в качестве первого параметра. Похоже, ваша функция на самом деле не ожидает этого. Поскольку вы пытаетесь использовать свойство с именем after, похоже, ваш код ожидает аргумент типа Change, что никогда не будет иметь место для событий onCreate. Объекты типа Change доставляются только к событиям onUpdate или onWrite, так что вы можете определять до и после состояний документа.

Если вы хотите получить данные из вновь созданного документа в типе onCreate триггер, вы должны кодировать так:

exports.createPost = functions.firestore
    .document('User/{UserId}/Posts/{PostsID}')
    .onCreate( async (snap, context) => {
        const newValue = snap.data();
        // use the document properties of newValue here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...