Как удалить узел с облачной функцией?

#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. Разве это не то, что вы ищете?