Допустим, у меня есть узел firebase, который называется dbref = firebase.ref ('/ Transfer_Request / {pushID] /').
И клиент записывает два значения; from_ID и to_ID в dbref. Как мне получить отдельные значения from_ID и to_ID из функций Firebase Cloud?
Мой код:
exports.TransferTicket = functions.database.ref('/Transfer_Request/{pushID}').onWrite((event) => {
const original = event.data.val();
const from_ID = original.from_ID;
const to_email_ID = original.to_ID;
//search for to_email ID
return admin.database().set("A transfer request was just made");
});
Я получаю две ошибки:
1)
TypeError: admin.database(...).set is not a function at exports.TransferTicket.functions.database.ref.onWrite (/user_code/index.js:41:25) at Object. (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:59: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:53:36) at /var/tmp/worker/worker.js:716:24 at process._tickDomainCallback (internal/process/next_tick.js:135:7)
2)
TypeError: Cannot read property 'from' of null at exports.TransferTicket.functions.database.ref.onWrite (/user_code/index.js:35:25) at Object. (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:59: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:53:36) at /var/tmp/worker/worker.js:716:24 at process._tickDomainCallback (internal/process/next_tick.js:135:7)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Первая проблема возникает из-за того, что при выполнении следующих действий вы упускаете Firebase Reference.
return admin.database().set("A transfer request was just made");
Ты должен сделать:
admin.database().ref('...the path where you want to write...').set("A transfer request was just made");
Дополнительные сведения см. В документации для Справка и База данных.
Вторая проблема связана с тем, что с момента выхода новой версии 1.0.0 Firebase SDK for Cloud Functions синтаксис изменился. См. Этот документ пункт.
Вы должны изменить свой код следующим образом:
exports.TransferTicket = functions.database.ref('/Transfer_Request/{pushID}').onWrite((change, context) => {
const original = change.after.val();
const from_ID = original.from_ID;
console.info(from_ID);
const to_email_ID = original.to_ID;
console.info(to_email_ID);
return admin.database().ref('...path...').set("A transfer request was just made")
.catch(error => {
console.info(error);
//...
});
});
Ваш объект javascript кажется правильным. Когда вы смотрите на базу данных из консоли Firebase; вы видите правильные значения для from_ID и to_ID?
Можете ли вы добавить в свой пост отрывок из своей базы данных для узла Transfer_Request?
Загрузил, как вы просили!
Единственная странная мысль, которую я вижу, - это то, что на экране печати вы пропускаете двойную кавычку в конце [email protected] и [email protected]. В остальном должно работать. Я обновил свой ответ несколькими журналами консоли. Что вы видите в журнале функций? Я также обновляю код с помощью ловушки для метода set (), чтобы обрабатывать возможные отклонения обещаний.
Позвольте нам продолжить обсуждение в чате.
Большое спасибо! Я ввожу значение в .ref ('/ Transfer_Request / {pushID] /') как {"from_ID": "[email protected]", "to_ID": "[email protected]"}. Теперь, как мне присвоить значения from_ID и to_ID различным переменным в моей программе? Потому что он говорит, что 'change.after.val ()' имеет значение null. Может быть, это потому, что записывается не одно значение, а объект json?