【发布时间】:2018-01-05 07:56:34
【问题描述】:
我正在尝试将 Firebase Cloud Functions 集成到 Android 应用中。我是 Cloud Functions 和 Node.js 的新手。
所以,我有以下简单的 node.js 代码来将数据保存在 Firestore 数据库中:
'use strict';
const admin = require('firebase-admin');
const functions = require('firebase-functions');
admin.initializeApp(functions.config().firebase);
const Firestore = require('@google-cloud/firestore');
exports.saveData = functions.https.onRequest((request, response) => {
var firestoreDB = new Firestore({
projectId: 'my_project_id',
keyFilename: 'my_key_file_name'
});
const line1 = request.body.line1;
const line2 = request.body.line2;
var data = {
name: line1,
number: line2
};
return firestoreDB.collection('myData').doc('firstDoc')
.add( data )
.then(ref => {
console.log('Data saved.');
response.end();
});
});
这段代码运行良好,但被执行了两次。它将数据写入数据库两次,在 Firebase 控制台日志屏幕中记录每个日志两次。
我尝试了另一个使用 FCM 从 Android 设备向 Android 设备发送消息的功能,它也发送了两次消息。
我检查了 Android 端以确保它被触发一次。我想知道是否有什么我错过了让它工作。任何帮助或建议表示赞赏。
【问题讨论】:
-
由于我在您的代码中没有看到任何响应并且它以超时结束,因此您的设备可能会在超时后发送另一个请求。我的浏览器有这个问题,在超时后发送了另一个请求。在
console.log('Data saved.');之后,您不是缺少response.status(200).send('OK')之类的东西吗?不过,我不熟悉 firebase 功能。 更新:刚刚找到一个例子here -
我不确定这是否是根本原因,但您应该使用 res.redirect()、res.send() 或 res.end() 解决前提。
-
@Molda,我认为我的设备在超时后不会发送另一个请求。上述超时消息在一定时间后同时出现。我在一些教程中看到了'response.status(200).send('OK')',它有什么作用以及它应该在代码中的什么位置?谢谢。
-
@Dan,您能否通过代理(如 Fiddler)引导来自您设备的流量,以验证该应用仅发出一个请求。
标签: android node.js google-cloud-functions