我运行一个简单的节点脚本来更新Firestore数据库中的数据。我几个小时前用过,效果很好。吃完饭,回来了,现在当我运行它时出现了这个错误:
node ./json-to-firestore.js
Firestore中存储的Date对象的行为将改变 而且您的应用可能会崩溃。隐藏此警告并确保您的应用确实 不间断,您需要先在应用中添加以下代码 调用其他任何Cloud Firestore方法:
const firestore = new Firestore(); const设置= {/ *您的 设置... * / timestampsInSnapshots:true};
firestore.settings(settings);
错误中提供的示例不适用于我的情况。我一直在寻求有关此问题的帮助,但所有帖子似乎都是针对特定角度的。这就是我要做的所有事情:
var admin = require("firebase-admin");
var serviceAccount = require("./service-key.json");
const data = require("./occ-firestore.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "xxxxxxxxxxx"
});
data && Object.keys(data).forEach(key => {
const nestedContent = data[key];
if (typeof nestedContent === "object") {
Object.keys(nestedContent).forEach(docTitle => {
admin.firestore()
.collection(key)
.doc(docTitle)
.set(nestedContent[docTitle])
.then((res) => {
console.log("Document successfully written!");
})
.catch((error) => {
console.error("Error writing document: ", error);
});
});
}
});
我通过运行以下脚本来执行该脚本:
node ./json-to-firestore.js
我正在运行NodeJS 8.11.3。
我检查了Google's docs,但没有提及这种新行为。
有人可以给我一个建议吗?预先感谢!
答案 0 :(得分:5)
可以这样修复:
const admin = require('firebase-admin');
const functions = require('firebase-functions');
admin.initializeApp(functions.config().firebase);
const db = admin.firestore();
db.settings({ timestampsInSnapshots: true });
答案 1 :(得分:1)
我通过将Firebase版本降级为此来解决
{
firebase-admin: "5.12.0",
firebase-functions: "1.0.1"
}
答案 2 :(得分:0)
Firebase正在更改Date对象在Firestore中的存储方式。每当您尝试将Date对象保存到Firestore时,Bello便是来自他们的实际警告(在发布此答案之日):
Firestore中存储的Date对象的行为将改变 而且您的应用可能会崩溃。 要隐藏此警告并确保您的应用不会中断,您需要添加 在调用任何其他Cloud Firestore方法之前,将以下代码添加到您的应用中:
<Page.DataContext>
更重要的是,如何处理这些更改,以使您的代码不会中断:
进行此更改后,存储在Cloud Firestore中的时间戳将读为 Firebase时间戳对象,而不是作为系统日期对象。所以你也会 需要更新期望日期的代码而不是期望时间戳的代码。例如:
const firestore = new Firestore();
const settings = {/* your settings... */ timestampsInSnapshots: true};
firestore.settings(settings);