使用Firebase Admin SDK(NodeJS)将数据导入Firestore不适用于所有集合

杜尔科·马特科

我将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);
       });
     });
  });

这是带有完整代码的Gist:https : //gist.github.com/DurkoMatko/1097d1c18a00d5fd4195253205c53ff2

我还尝试过替换collection("products").add(product)collection("products").doc(product.id).set(product)尚不存在的新文档。仍然没有成功。另外,或中的断点.thencatch部分触发器。这些行只是默默地发生,但是没有创建新产品文档。

请问有人知道吗?

杜尔科·马特科

好的,我已经解决了此问题,方法是直接将产品创建为.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);
      });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Firestore中,是否将.get()与集合引用上的nodejs admin sdk一起使用将所有数据读入内存?

使用admin SDK从Firestore集合中获取所有密钥

使用Python admin SDK列出所有Firestore集合

适用于Android的Firebase Admin SDK,找不到方法

无法使用适用于Node.js的Admin SDK将Firebase存储中的内容处置替换为“内联”

在firebase-database-dotnet中使用Firebase Admin SDK

Firebase Admin SDK Android

使用 firebase-admin 将图像上传到 Firebase 存储

Firebase 安全规则:“auth != null”不适用于来自 firebase-admin 的查询

将数据框导入Firebase-admin

如何使用 python 使用 firebase admin sdk 验证登录

在节点中同时使用Firebase Admin SDK和Client SDK

如何在Spring MVC中使用Firebase Admin SDK

Firebase Admin SDK使用提供程序创建用户

使用 firebase-admin SDK for go 重试失败的 FCM 消息

使用Admin SDK发送1000多个通知-Firebase Cloud Messaging

使用Firebase Admin SDK进行REST API身份验证

如何使用云功能通知Firebase Admin SDK用户?

如何在Flutter中使用Firebase Admin SDK?

使用Firebase Admin SDK创建用户时获取匿名用户

Node JS / Firebase Admin SDK / Firestore - 使用快照接收 Firebase 文档后获取空数组

Firebase Admin SDK:setCredential() 的 NoSuchMethodError

Firebase python admin sdk isNewUser()

Python Firebase Admin SDK - DefaultCredentialsError

Firebase JAVA admin sdk FirebaseAuthException

如何从 Admin SDK 从 Firebase Messaging 导入接口?

如何使用admin SDK将文件上传到带有路径的Firebase的云存储中?

使用/ admin /的Htaccess重写规则,适用于许多规则

具有Heroku的Firebase Admin SDK