0

firebase 데이터베이스 트리거에서 와일드 카드가 작동하는 방법을 알고 있습니다. 그러나 Firebase 트리거를 사용하면 약간의 어려움이 있습니다.Firebase 데이터베이스에서 각 사용자의 uid에 액세스하는 방법 HTTP 트리거

내 목표는 데이터베이스에 각 사용자에 대해 /users 노드를 쓰는 클라우드 기능을 사용하는 것입니다.

다음
`userID` not defined. 

내 사용자 노드의 JSON이다 : 나는 예 here을 부여하지만 오류 코드를 반환 다음

exports.sync = functions.https.onRequest((req, res) => { 

    admin.database().ref('users/'+ userId + '/week1').set(10); 
    res.send('it worked'); 

}); 

인가 : 다음

users:{ 
    "1YrpX2W2xnMPoy4YGpZcOE0xJ5g2" : { 
    "email" : "[email protected]", 
    "fullname" : "Muyiz", 
    "selection" : [ 1, 2, 3, 4, 5, 6 ], 
    "teamname" : "Donawon", 
    "total" : 12, 
    "userName" : "[email protected]", 
    "week1" : 0, 
    "week10" : 0, 
    "week11" : 0, 
    "week12" : 0, 
    "week2" : 0, 
    "week3" : 0, 
    "week4" : 0, 
    "week5" : 0, 
    "week6" : 12, 
    "week7" : 0, 
    "week8" : 0, 
    "week9" : 0 
    }, 
    "6K9rQiZQ3jaV38WWtDbNwxhqIwc2" : { 
    "email" : "[email protected]", 
    "fullname" : "Dami Etomi", 
    "selection" : 0, 
    "teamname" : "Bayern Neverlosin'", 
    "total" : 0, 
    "userName" : "[email protected]", 
    "week1" : 0, 
    "week10" : 0, 
    "week11" : 0, 
    "week12" : 0, 
    "week2" : 0, 
    "week3" : 0, 
    "week4" : 0, 
    "week5" : 0, 
    "week6" : 0, 
    "week7" : 0, 
    "week8" : 0, 
    "week9" : 0 
    } 
} 

내 클라우드 기능입니다 그 기능은 각 사용자의 week1 노드에서 set 노드가 될 수있는 방법이 있습니까? 나는 이것이 사용자 노드를 통해 루핑하는 것을 포함하지만 와일드 카드로 {userID}을 입력하지 않고 데이터베이스 참조를 만드는 방법을 알 수 없다는 것을 이해합니다.

각 사용자의 selection 어레이에 액세스하는 데 역 인용 부호를 사용할 수 있습니까? 난 그냥 어쩌면 각 사용자에 대한 각 선택의 배열을 얻을 수있는 사용자를 반복 wouldnt가 userSnapshot.val().selection를 작성 맡기

`${userSnapshot.val()}`.selection; would do the trick? 

마지막 코드는 다음과 같이 보일 것이다 :

exports.sync = functions.https.onRequest((req, res) => { 
    admin.database().ref('users').once('value').then(function(snapshot) { 
     var updates = {}; 
     snapshot.forEach(function(userSnapshot) { 
      var selection = `${userSnapshot.val()}`.selection; 
      updates[`/users/${userSnapshot.key}/week1`] = 10; 
     }); 
     admin.database().ref().update(updates).then(function() { 
      res.send('it worked'); 
     }); 
    }); 
}); 

답변

0

각 사용자를 업데이트하려면 ' 청취자를 /users에 연결하고 결과를 반복하고 각각을 업데이트해야합니다. 코드에서 :

exports.sync = functions.https.onRequest((req, res) => { 
    admin.database().ref('users').once('value').then(function(snapshot) { 
     var updates = {}; 
     snapshot.forEach(function(userSnapshot) { 
      updates[`/users/${userSnapshot.key}/week1`] = 10; 
     }); 
     admin.database().ref().update(updates).then(function() { 
      res.send('it worked'); 
     }); 
    }); 
}); 
+0

감사합니다. ! 그것은 효과가 있었다. 나는''역 인용 부호 (backquotes)의 사용에 주목한다. 그것은 각 사용자마다 다른 노드에 사용되는 것입니다. 예를 들어, 각 사용자의 "선택"노드에 액세스하는 데 사용할 수 있습니까? 내 질문을 반영하도록 질문을 편집합니다. –

+0

역 인용 부호는 ES6 트릭입니다 : 템플릿 리터럴. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals를 참조하십시오. –