我将Firestore用作我的React Web应用程序的数据库。在运行使用cypress的浏览器测试之前,我执行一个NodeJS脚本,该脚本导入那些测试所需的数据。我的Firebase计划设置为Blaze(即付即用),因为免费版本不支持导入。
我有3个收集数据的地方-组织,配置文件,产品。 使用相同的代码,导入适用于组织和个人资料,但不适用于产品:
const admin = require("firebase-admin");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: `https://<myFirebaseProjectId>.firebaseio.com`
});
const testOrg = {
name: "testOrgName",
createdAt: Date()
};
//add organization
admin.firestore().collection("organizations").add(testOrg)
.then(createdTestOrg => {
//works fine with organizations
console.log("Successfully created new org:", createdTestOrg.id);
const testProfile = {
name: "testProfile",
organization: admin.firestore().doc(`organizations/${createdTestOrg.id}`)
createdAt: Date()
};
//add profiles
admin.firestore().collection("profiles").add(testprofile)
.then(createdTestProfile => {
//works fine with profile
console.log("Successfully created new profile:", createdTestProfile .id);
let productItem = {
isDeleted: false,
createdBy: admin.firestore().doc('profiles/' + selectedUser[0].uid),
createdAt: Date()
};
productItem.name = makeRandomName(10)
//add product
admin.firestore().collection("products").add(productItem)
.then((newProd)=>{
// I never get here
console.log("Successfully created test product");
})
.catch(error => {
// I never get here either
// eslint-disable-next-line no-console
console.log("Error creating test product:", error);
process.exit(1);
});
});
});
以下是完整内容的要点:https://gist.github.com/DurkoMatko/1097d1c18a00d5fd4195253205c53ff2
我还尝试将collection("products").add(product)
替换为collection("products").doc(product.id).set(product)
,如果尚不存在,则会创建新文档。仍然没有成功。此外,.then
和。catch
部分中的断点均不会触发。这些行只是默默地发生,但是没有创建新产品文档。
有人请问吗?
答案 0 :(得分:0)
好的,我已经解决了这一问题,直接将产品创建为.add
函数的参数,而不是在将其传递给const
之前将其存储为.add
变量。我不知道为什么这行得通,而我在问题中发布的代码却不行。希望它对以后的人有所帮助。
admin
.firestore()
.collection("products")
.add({
name: "BrowserTestProduct26",
createdAt: Date.now(),
createdBy: admin.firestore().doc(`profiles/${userRecord.uid}`),
isDeleted: false,
category: categories[Math.floor(Math.random() * categories.length)]
})
.then(createdProduct => {
console.log("Successfully created new product:", createdProduct.id);
})
.catch(error => {
console.log("Error creating test product:", error);
process.exit(1);
});