admin.firestore.FieldValue.serverTimestamp()不适用于Firebase实时数据库

问题描述 投票:0回答:1

我正在尝试使用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_updatedcreated_at时间戳字段外,所有字段都存在。我可以知道此代码段出什么问题吗?

node.js firebase-realtime-database timestamp
1个回答
1
投票

您正在尝试将常数用于Firestore与实时数据库进行交互。虽然这两个数据库都是Firebase的一部分,但它们是完全独立的,并且您不能将API与其他数据库一起使用。

将服务器端时间戳写入实时数据库,使用:

ref.set(firebase.database.ServerValue.TIMESTAMP)

另请参阅ServerValue上的Firebase文档。

© www.soinside.com 2019 - 2024. All rights reserved.