我在交互式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
中调用的第一个参数是什么?这是什么目的?
答案 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()
。