我正在尝试使用Firebase实时数据库编写消息传递应用程序,该数据库在Cloud Firestore上已经具有某些功能。我在文件messages.js
const admin = require('firebase-admin');
const config = require('./config');
admin.initializeApp(config);//config information
const realtime_db = admin.database();
const { uuid } = require("uuidv4");
const {
generate_message_structure,
} = require("../util/schema");
exports.async_create_message = async function(data, context) {
try {
const message = generate_message_structure(data);//creates a Javascript Object
const message_log_id = "Some_id";//derived from a function
//Some interactions with Cloud Firestore
const generated_token = uuid();
await realtime_db.ref(`messages/${message_log_id}/${generated_token}`).set(message);
console.log(message);//output shown later
console.log("Message created");
console.log(`message_id of ${generated_token}`)
} catch (error) {
console.log(error);
}
}
我将测试写在同一文件的底部,然后运行node messages.js
在数据库中创建一条记录。
const mockMessage = {};//capitalised constants are strings
mockMessage[MESSAGE_BODY] = "Test body";
mockMessage[MESSAGE_SENDER_ID] = "Alice_id";
mockMessage[MESSAGE_RECEIVER_ID] = "Bob_id";
mockMessage[MESSAGE_IMAGE] = {
uid: "random_id",
url: "google.com"
};
exports.async_create_message(mockMessage);
先前注释的console.log
的输出具有以下结构。
{
body: 'Test body',
sender_id: 'Alice_id',
receiver_id: 'Bob_id',
image: { uid: 'random_id', url: 'google.com' },
last_updated: ServerTimestampTransform {},
created_at: ServerTimestampTransform {},
seen: false
}
但是当我检查数据库中的记录时,除last_updated
和created_at
时间戳字段外,所有字段都存在。我可以知道此代码段出什么问题吗?
您正在尝试将常数用于Firestore与实时数据库进行交互。虽然这两个数据库都是Firebase的一部分,但它们是完全独立的,并且您不能将API与其他数据库一起使用。
将服务器端时间戳写入实时数据库,使用:
ref.set(firebase.database.ServerValue.TIMESTAMP)
另请参阅ServerValue上的Firebase文档。