2017-12-19 12 views
0

내가 다음 ref('/users/{userId}/items/{newItem}') 에 이벤트를 발생한다고 가정 중포 기지 클라우드 기능에 와일드 카드에서 데이터를 얻을 수 있지만어떻게 내가 <code>var token = event.params.userId.token</code> 시도 <code>userId</code></p> <p>와일드 카드 내부에서 값을 얻으려면

을 undefined로 돌아

제안 사항이 있으십니까?

+1

만'event.params.userId'이 될 것입니다 한정된. 해당 ID가 발생한 사용자의 마법 조회는 없습니다. 함수를 트리거 한 사용자의 사용자 객체를 가져 오려면 https://stackoverflow.com/questions/42750060/getting-the-user-id-from-a-database-trigger-in-cloud-functions를 참조하십시오. -for-firebase –

+0

감사합니다.이 코드 스 니펫을 시도해 보았습니다.'return admin .database() .ref ('/ users/$ {userId}/token') .once 와일드 카드 userId에 대해 하나의 값을 트리거하여 그 값을 가져온 곳에서 (예 : 'value') .then (data => { return admin.messaging(). sendToDevice (data.val(), payload); }); 토큰 –

+0

이 스 니펫은 'userId'를 기반으로 데이터베이스에서 토큰을 찾습니다. 그러나 단순히'event.params.userId.token'을 실행하여 토큰을 읽을 수는 없으며, 단순히'token' 속성은 그 함수를 트리거 한 경로의 매개 변수에서 사용할 수 없습니다. –

답변

0

Tokentrigger 이벤트에서 자동으로 반환되는 매개 변수가 아닙니다. 트리거 와일드 카드에서는 와일드 카드에 직접 해당하는 매개 변수 만 반환됩니다. 당신이

var userId = event.params.userId 

를 사용하려면 그리고 함수 내에서 당신이 토큰을 얻을 도움이 될 것입니다 다른 Promise

return admin.database().ref(/users/userId/token).once('value').then(data => { 
//do something here 
}) 

이 할 수 있다면 그래서 당신은 다음을 수행해야합니다. 또는 한 단계로 수행하려면 userID를 와일드 카드로 사용하여 다음을 시도 할 수 있습니다.

return admin.database().ref(/users/{userId}/token).once('value').then(data => { 
    //do something here 
    }) 

하지만, 여기에 여러 개의 토큰을 받게됩니다 다음 당신에게 관련이있는 userId 결정하는 아이들을 반복해야 할 것이다 당신의 코드에서