Ошибка типа: не удается прочитать свойство 'child' из неопределенного - PullRequest
0 голосов
/ 15 сентября 2018

Я исследовал это, но не могу найти ответ.

У меня есть приложение с водителем и гонщиком. Когда наездник запрашивает поездку, он добавляет дочернего элемента «history» в БД. У меня также есть функции, но когда это приложение выполняется, журналы вызывают ошибку перед добавлением дочернего элемента 'history'.

index.js:

exports.newRequest = functions.database.ref('/history/{pushId}').onCreate(event => {
    var requestSnapshot = event.data;
    var distance  = requestSnapshot.child('distance').val();
    var price  = distance * 0.5;
    var pushId = event.params.pushId;
    return requestSnapshot.ref.parent.child(pushId).child('price').set(price);
});

Когда я запускаю свое приложение, я получаю эту ошибку в журналах функций:

TypeError: Cannot read property 'child' of undefined
at exports.newRequest.functions.database.ref.onCreate.event (/user_code/index.js:17:36)
at cloudFunctionNewSignature (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:105:23)
at cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:135:20)
at /var/tmp/worker/worker.js:733:24
at process._tickDomainCallback (internal/process/next_tick.js:135:7)

index.js: 17: 36

var distance  = requestSnapshot.child('distance').val();

Моей первой мыслью было, что «расстояние» ребенка недоступно. В моем коде дочерняя «история» не добавляется до тех пор, пока не завершится btnRequest.

Есть идеи? Есть ли способ изменить код в index.js для работы с кодом, который есть в моем приложении?

Редактировать # 1

После обновления API:

npm install firebase-functions@latest --save
npm install firebase-admin@latest --save-exact

npm install -g firebase-tools

Я обновил свой файл index.js до:

exports.newRequest = functions.database.ref('/history/{pushId}').onCreate(snapshot, context => {
var requestSnapshot = snapshot.val();
var distance  = requestSnapshot.child('distance').val();
var price  = distance * 0.5;
var pushId = snapshot.params.pushId;

return requestSnapshot.ref.parent.child(pushId).child('price').set(price);
});

Не уверен, что вышеприведенное верно, но я развернул и получил этот ответ:

Error: Error occurred while parsing your function triggers.

ReferenceError: snapshot is not defined
    at Object.<anonymous> (/Users/lizg/Desktop/Programs/Android/Google-Play/ryyde_functions/functions/index.js:15:75)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at /Users/lizg/.npm-global/lib/node_modules/firebase-tools/lib/triggerParser.js:21:11
    at Object.<anonymous> (/Users/lizg/.npm-global/lib/node_modules/firebase-tools/lib/triggerParser.js:75:3)

Редактировать # 2

Обновлен код index.js:

exports.newRequest = functions.database.ref('/history/{pushId}').onCreate((snapshot, context) => {
var requestSnapshot = snapshot.val();
var distance  = requestSnapshot.child('distance').val();
var price  = distance * 0.5;
var pushId = snapshot.params.pushId;

return snapshot.ref.parent.child(pushId).child('price').set(price);
* +1039 *});

Ошибка в журналах:

TypeError: requestSnapshot.child is not a function
at exports.newRequest.functions.database.ref.onCreate (/user_code/index.js:17:37)
at cloudFunctionNewSignature (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:105:23)
at cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:135:20)
at /var/tmp/worker/worker.js:733:24
at process._tickDomainCallback (internal/process/next_tick.js:135:7)

index.js: 17: 37 - var distance = requestSnapshot.child ('distance'). Val ();

1 Ответ

0 голосов
/ 15 сентября 2018

Вы используете старые API против более новой версии Cloud Functions for Firebase SDK. Вам необходимо обновить до новых API. В частности, нужно отметить, что изменилось в версии 1.0 firebase-функций. Все изменения приведены здесь.

В частности, посмотрите, что изменилось в триггерах базы данных . Вы используете параметр «событие» старого стиля для первого аргумента триггера базы данных:

exports.newRequest =
functions.database.ref('/history/{pushId}').onCreate(event => {
    // ...
})

В версии 1.0 это было изменено для принятия DataSnapshot и EventContext объекта:

exports.newRequest =
functions.database.ref('/history/{pushId}').onCreate((snapshot, context) => {
    // ...
})

Для получения более подробной информации см. Документацию.

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