Облачные функции - - PullRequest
0 голосов
/ 04 мая 2019

Я сейчас использую Node.js 8 и облачные функции Firebase версии 2.0.0.

У меня проблема с этой новой версией, потому что произошли некоторые критические изменения.

Моя проблема в том, что я написал метод, который прослушивает узел в базе данных Firebase Realtime при добавлении нового дочернего элемента. Этот метод запускается, а затем отправляет данные другому узлу в базе данных.

Код

exports.addlikechange = functions.database.ref('/likes/{postid}/{userUID}').onWrite((change,context) => {
    const model = change.after.val();

    let genre = model.genre;
    let videoID = model.videoID;
    let userVideoID = model.userVideoID;

    console.log("Start func","--------> Start Like Count <----- ");
    console.log("model: ",model);
    console.log("genre: ",genre);
    console.log("videoId: ",videoID);
    console.log("userVideoID: ",userVideoID);

    const countRef = collectionRef.child('likes');


    // Return the promise from countRef.transaction() so our function 
    // waits for this async event to complete before it exits.
     return countRef.transaction(current => {
      if (change.data.exists() && !change.data.previous.exists()) {
        const genreList = admin.database().ref(`${genre}/${videoID}/likes`).transaction(current => {
          return (current || 0) + 1;
        });
        const userList = admin.database().ref(`users/${userVideoID}/likes`).transaction(current => {
          return (current || 0) + 1;
        });
        const videoList = admin.database().ref(`videos/${userVideoID}/${videoID}/likes`).transaction(current => {
          return (current || 0) + 1;
        });
      }
     }).then(() => {
       console.log('Counter updated.');
       console.log("End func","--------> End Like Count <----- ");
     });
   });

Проблема с collectionRef, в logcat говорится, что collectionRef не определен. Но, как видите, оно определено.

Полная ошибка

ReferenceError: collectionRef is not defined
    at exports.addlikechange.functions.database.ref.onWrite (/user_code/index.js:60:36)
    at cloudFunctionNewSignature (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:120:23)
    at cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:151:20)
    at /var/tmp/worker/worker.js:827:24
    at process._tickDomainCallback (internal/process/next_tick.js:135:7)

Есть идеи, что изменилось или как я могу это решить?

Ответы [ 2 ]

0 голосов
/ 05 мая 2019

Как и ответ, упомянутый выше, я не вижу нигде определения collectionRef.

Но я думаю, что сломало ваш (если он работал раньше, несмотря на неопределенный collectionRef) код, установка узла 8 автоматически включит строгую конфигурацию в вашем tsconfig.json.

Но вы также можете сделать это, чтобы отключить принудительное применение любой неопределенной переменной:

Добавьте "strict": false, к вашему tsconfig.json файлу так:

 {
    "compilerOptions": {
    "module": "commonjs",
    "noImplicitReturns": true,
    "noUnusedLocals": true,
    "outDir": "lib",
    "sourceMap": true,
    "strict": false,
    "target": "es2015"
  },
  "compileOnSave": true,
  "include": [
    "src"
  ]
}
0 голосов
/ 04 мая 2019

То, что вы говорите, не соответствует действительности - collectionRef никогда не определялось. Вы пытаетесь использовать что-то под названием collectionRef, но вы никогда не присваивали ему значение. Вам нужно сделать что-то вроде этого:

const collectionRef = ...   // whatever reference you need to use here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...