Похоже, что написанный вами код предназначен для запуска при добавлении нового заказа в базу данных. Но вы объявили, что он срабатывает так:
exports.sendPushR = functions.database.ref('/request/{pid}/{uid}/orders')
.onWrite(async (snapshot, context) => {
Это означает, что вместо этого код запускается всякий раз, когда что-либо пишется для пользователя под узлом orders
. Чтобы сработать только тогда, когда ордер записан под этим orders
узлом, определите ваш триггер как:
exports.sendPushR = functions.database.ref('/request/{pid}/{uid}/orders/{orderid}')
.onWrite(async (snapshot, context) => {
Разница выше в том, что путь теперь включает {orderid}
, что означает, что он запускает на один уровень ниже в дереве, и ваш snapshot.after
больше не будет содержать уровень -L
.
Поскольку вам кажется, что на самом деле вас беспокоит только то, когда создается заказ, вы также можете активировать его только (это означает, что ваша функция не будет вызываться при обновлении или удалении заказа). Это было бы что-то вроде этого:
exports.sendPushR = functions.database.ref('/request/{pid}/{uid}/orders/{orderid}')
.onCreate(async (snapshot, context) => {
...
const afterData = snapshot.val();
const username = snapshot.val().username;
console.log(afterData);
console.log(username);
...
});
Здесь мы снова запускаем на нижнем уровне в JSON. Но поскольку теперь мы запускаем onCreate
, у нас больше нет снимка «до» и «после», а вместо этого просто делаем snapshot.val()
, чтобы получить только что созданные данные.