#javascript #node.js #firebase #firebase-realtime-database #google-cloud-functions
#javascript #node.js #firebase #firebase-realtime-база данных #google-cloud-функции
Вопрос:
Это моя структура базы данных Firebase:
project
|
|- Users
|
| - 00001
|
| - Likes
| |
| | - 00001
| |
| | - 'whatever':'whatever'
|
| - Unlikes
|
| - 00002
|
| - 'whatever':'whatever'
Мне нужна функция, запускаемая DB, которая, когда пользователь добавляет Likes
элемент с идентификатором 00002
, автоматически удаляет его Unlikes
.
Я использую JavaScript, и это функция, которая у меня есть прямо сейчас:
exports.likeItem = functions.database.ref('/Users/{userId}/Likes/{itemId}'.toString()).onCreate((like, context) => {
return like.ref.parent.child('/Unlikes').once('value', (unlikes) => {
unlikes.ref.child(context.params.itemId).set(null);
});
});
Функция запускается правильно, когда записывается like, но не удаляет отличие.
Ошибка заключается в следующем:
'parent' of undefined at exports.likeItem.functions.database.ref.onCreate
Комментарии:
1. Из того, что вы показали здесь, сообщение об ошибке предполагает, что
like.ref
это не определено. Похоже, вам нужно выполнить какую-то отладку?
Ответ №1:
Если я правильно понял, чего вы пытаетесь достичь, следующее должно сработать.
exports.likeItem = functions.database
.ref('/Users/{userId}/Likes/{itemId}')
.onCreate((like, context) => {
return like.ref.parent.parent
.child('/Unlikes/' context.params.itemId)
.set(null);
});
Обратите внимание, что вам не нужно ничего читать с once()
помощью метода. Просто определите правильную ссылку для удаления (с like.ref.parent.parent.child(....)
помощью) и установите для нее значение null
.
Комментарии:
1. @Sergio Вы уверены в предлагаемом редактировании? С текущим кодом, если вы напишете like под 00004, он удалит отличие под 00004. Разве это не то, что вы ищете?