Определить URL RTDB в триггерной функции - PullRequest
0 голосов
/ 20 апреля 2020

я создаю масштабируемое приложение чата с RTDB и firestore

вот моя грубая структура шардов

SHARD1
    Chats {
        chat01: {
            Info: {
                // some info about this chatroom
            },
            Messages ...
       }, ....
    }
SHARD2...

теперь у меня есть триггеры записи на все информационные узлы всех шардов.

я хочу получить ID осколка Как узнать, на каком осколке он действительно работал?

[EDIT]

console.log(admin.app().name); // it prints "[DEFAULT]" in console

Puf и команда, пожалуйста, помогите

1 Ответ

1 голос
/ 20 апреля 2020

Когда вызывается триггер базы данных реального времени, вторым аргументом является объект EventContext , который содержит информацию об обновленной базе данных и узле. Этот объект содержит строку resource , которая содержит то, что вы ищете. Согласно документации для этой строки, ее свойство name будет отформатировано как:

projects/_/instances/<databaseInstance>/refs/<databasePath>

Строка databaseInstance - это то, что вы ищете. Таким образом, вы можете просто разбить строку на «/» и взять 4-й элемент этого массива:

export const yourFunction = functions.database
.instance('yourShard')
.ref('yourNode')
.onCreate((snap, context) => {
    const parts = context.resource.name.split('/')
    const shard = parts[3]
    console.log(shard)
})

Если все, что вам нужно, это ссылка на местоположение изменения, чтобы выполнить некоторые изменения там вы можете просто использовать свойство ref в DataSnapshot , которое было доставлено в первом аргументе, и построить путь относительно него.

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