2017-09-11 13 views
0

文書化された機能が動作していないように思われるこの奇妙な問題が見つかりました。once()が完全に動作している間にadmin.ref.on()が動作しない

私はこの作業コードを持っている:私はonce()からon()に変更すると

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

cors(req, res,() => { 
    admin.database().ref('events').orderByValue().once('value', function(snapshot) { 

     res.status(200).send(snapshot.val()); 

    }).catch(error => { 
     console.error('Error while reading data', error); 
     res.status(403).send('Error: ' + error); 
    }); 

は、私はエラーを取得します。

を直接読み取るアプリがあるので、eventsに変更があったときにサーバーが新しいJSONペイロードを送信し、データを提供するためのリンクしか使用できないため、すべてのSDK機能が無効になります。私は何か間違っているのですか?

エラーログ:

TypeError: admin.database(...).ref(...).orderByValue(...).on(...).catch is not a function 
at cors (/user_code/index.js:24:11) 
at cors (/user_code/node_modules/cors/lib/index.js:188:7) 
at /user_code/node_modules/cors/lib/index.js:224:17 
at originCallback (/user_code/node_modules/cors/lib/index.js:214:15) 
at /user_code/node_modules/cors/lib/index.js:219:13 
at optionsCallback (/user_code/node_modules/cors/lib/index.js:199:9) 
at corsMiddleware (/user_code/node_modules/cors/lib/index.js:204:7) 
at exports.getEvents.functions.https.onRequest (/user_code/index.js:19:2) 
at cloudFunction (/user_code/node_modules/firebase-functions/lib/providers/https.js:26:47) 
at /var/tmp/worker/worker.js:635:7 
+0

どのようなエラーがありますか?セキュリティルールとサンプルデータを共有できますか? – Kato

+0

'once()'メソッドが完全に機能するので、セキュリティとは関係ありません。ダッシュボードからエラーログを使用して質問を更新しました。おそらくそれが役に立ちます。 –

答えて

3

あなたの文の最後に.catchを追加しようとしました。 .onはこの機能をサポートしていません。

問題を解決する必要のあるサンプルコードを参照してください。

admin.database().ref('/somePath') 
    .orderByValue() 
    .on('child_added', (snapshot, prevChildKey) => { 
    console.log(snapshot.val()); // JSON 
    }, err => { 
    // Error is thrown here - Not in a .catch 
    }); 
+0

これはうまくいきましたが、データベースに変更があったときに更新されないようです。Firebaseはこれをサポートしていないかもしれませんが、なぜ 'on()'を実装するのですか? –

+0

'/ somePath'に新しい子が追加されたときにだけ起動します。それは更新のために起動するのではなく、新しい書き込みのみを起動します。 – sketchthat

+0

試してみました - 動作していません:/新しいデータがリフレッシュされた後にのみ表示されます。 –

関連する問題