Firebase云功能始终获取空快照

时间:2017-10-03 18:11:59

标签: node.js firebase google-cloud-functions

我在交互式shell(firebase experimental:functions:shell)中测试我的firebase云功能时遇到了一些问题。在onWrite事件中,event.data.val()在我第一次调用它时返回null,而不是返回我期望的信息。此外,在我通过移动应用程序更改某些数据后,它不会再自动调用。

以下是示例代码:

"use strict";

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

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

exports.syncMySql = functions.database.ref('/something/{user_token}/{something_id/}')
  .onWrite(event => {
    const snapshot = event.data.val();
    const user_token = event.params.user_token;
    const mock_id = event.params.something_id;

    console.log(functions.config());
    console.log('# User: ' + user_token + ',\n# Something: ' + something_id + ',\n# Snapshot: ' + snapshot +  '\n Evento: ' + JSON.stringify(event));

    return;
});

以下是我试图从firebase experimental:functions:shell调用它的示例:

syncMySql('', {params: {user_token: 'sOmEUseRtoKen1234-i_', something_id: '456789'}})

关于我做错什么的任何想法? 另外,syncMySql中调用的第一个参数是什么?这是什么目的?

1 个答案:

答案 0 :(得分:2)

对于通过这样的测试环境调用函数,您需要实际提供应该自己写入数据库的数据。 <settings ...> ... <profiles> ... <profile> <id>alwaysActive</id> <repositories> ... <repository> <id>clojars</id> <name>Repository for Clojure builds</name> <snapshots> <enabled>false</enabled> </snapshots> <url>https://clojars.org/repo</url> <layout>default</layout> </repository> </repositories> </profile> </profiles> <activeProfiles> <activeProfile>alwaysActiveProfile</activeProfile> </activeProfiles> </settings> 不会根据params读取来自exices权限的数据,但只会返回您在函数调用的第一个参数中传递的信息。

要调用event.data.val()onWrite函数,您需要以onUpdate形式提供数据,其中old_data和new_data可以是基元和/或对象,即您要写入的任何内容你的数据库。

所以你的完整电话应该是这样的:

{before: 'old_data', after: 'new_data' }

在这种情况下,syncMySql( { before: null, after: 'something' }, {params: {user_token: 'sOmEUseRtoKen1234-i_', something_id: '456789'}} ); 应该返回event.data.val()