0

我想要編寫創建每當有人使用我們的傳統應用創建一個記錄的記錄雲功能(我們已經改變了火力地堡後端架構並希望慢慢遷移用戶)。不過,我發現了以下錯誤在我的日誌:雲功能的火力地堡類型錯誤 - 無法讀取屬性

TypeError: Cannot read property 'update' of undefined 
    at exports.makeNewComment.functions.database.ref.onWrite.event (/user_code/index.js:14:92) 
    at /user_code/node_modules/firebase-functions/lib/cloud-functions.js:35:20 
    at process._tickDomainCallback (internal/process/next_tick.js:129:7) 

這裏是腳本問題:

//required modules 
var functions = require('firebase-functions'); 
const admin = require('firebase-admin'); 

// Listens for new comments added to /comments/ and adds it to /post-comments/ 

exports.makeNewComment = functions.database.ref('comments/{commentId}').onWrite(event => { 
    // Grab the current value of what was written to the Realtime Database. 
    const commentId = event.params.commentId; 
    const comment = event.data.val(); 
    // You must return a Promise when performing asynchronous tasks inside a Functions such as 
    // writing to the Firebase Realtime Database. 
    //return event.data.ref.parent.child('post-comments').set(comment); 
    return functions.database.ref('post-comments/' + comment['postID'] + '/' + commentId).update(comment).then(url => { 
    return functions.database.ref('user-comments/' + comment['postedBy'] + '/' + commentId).update(comment); 
    }); 
}); 

//initialize 
admin.initializeApp(functions.config().firebase); 

謝謝!

回答

1

基於Doug的回答,您可以用event.data.ref.root取代functions.database.ref

var functions = require('firebase-functions'); 
const admin = require('firebase-admin'); 

exports.makeNewComment = functions.database.ref('comments/{commentId}').onWrite(event => { 

    const commentId = event.params.commentId; 
    const comment = event.data.val(); 

    return event.data.ref.root.child('post-comments/' + comment['postID'] + '/' + commentId).update(comment).then(url => { 
    return event.data.ref.root.child('user-comments/' + comment['postedBy'] + '/' + commentId).update(comment); 
    }); 
}); 

admin.initializeApp(functions.config().firebase); 
4

不能使用functions.database.ref()在函數中獲得裁判的地方在你的數據庫。這僅用於定義新的雲端功能。

如果您想在數據庫中的某個位置使用引用,您可以使用event.data.refevent.data.adminRef來引用事件觸發的位置。然後你可以使用root屬性來重建一個新的ref到數據庫中的其他地方。或者您可以使用admin對象來構建新的參考。

這可能有助於瞭解一些sample code得到的東西是如何工作的感覺。

相關問題