«TypeError: Невозможно прочитать свойство 'replace' of undefined" при использовании облачных функций - PullRequest
0 голосов
/ 12 сентября 2018

Я новичок в облачных функциях для Firebase и пытаюсь использовать их с базой данных в реальном времени.

Я следую этой документации, где в верхней части страницы есть учебник Youtube.

Вот мой код в index.ts:

import * as functions from 'firebase-functions';

export const onMessageCreate = functions.database
.ref('/party/{partyID}/messages/{message}')
.onCreate((snapshot, context) => {
    const messageData = snapshot.val()
    const text = addMore(messageData.text)
    return snapshot.ref.update({ text: text })
})

function addMore(text: string): string {
    return text.replace(/\bhello\b/g, 'hey')
}

Однако я получаю следующую ошибку в журналах своих функций:

TypeError: Cannot read property 'replace' of undefined

at addMore (/user_code/lib/index.js:12:16)
at exports.onMessageCreate.functions.database.ref.onCreate (/user_code/lib/index.js:8:18)
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)

enter image description here

Моя структура базы данных, которая, я уверен, является правильной, выглядит следующим образом:

enter image description here

Что вызывает эту ошибку?Не установлен ли какой-нибудь «пакет» функций?

У меня работает узел v10.9.0 и npm 6.2.0.

Редактировать для Doug:

Спасибо, Даг, это было отличное видео!? Я отредактировал свою базу данных, которая теперь выглядит следующим образом, когда я добавляю сообщение (и предыдущие попытки, когда мои функции пытаются заменить слово):

enter image description here

Я также изменил код TypeScript ref, добавив /text в конец.Я также привел messageData к строке, используя String(), которая удаляет ошибки и показывает слова, как вы описали, «неопределенные».Как вы сказали, я разделил сообщения с детьми, но все еще озадачен, почему я не получаю значение и почему он добавляет дополнительного text дочернего элемента.Спасибо!


Если у вас есть какие-либо вопросы, пожалуйста, дайте мне знать!

Ответы [ 2 ]

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

В конце концов, я настроил мою базу данных так:

enter image description here

Я получил свое значение из этой базы данных, чтобы сделать его string:

String(snapshot.child('text').val())

Кроме того, сначала в return snapshot.ref.update({ text: text }) этот 'text' был параметром, который появится в базе данных.

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

В сообщении об ошибке сообщается, что вы передали неопределенное значение addMore.Затем вы пытаетесь вызвать строковый метод для этого неопределенного значения.

Используемый вами эталонный шаблон не соответствует вашей схеме базы данных.Похоже, вы предполагаете, что каждое сообщение существует как свое собственное свойство в базе данных.Это не сработает так, как вы ожидаете, и почти наверняка это не та модель базы данных, которую вы хотите использовать.Вместо этого вам, вероятно, следует помещать нового дочернего элемента в базу данных для каждого сообщения, у которого есть собственный дочерний элемент для текста сообщения.

/party
  /{partyid}
    /messages
      /{messageid}      //  You're missing this message id in the db
        /text = "foo"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...