微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AWS Lambda + Firestore 数据库:add() 未在集合中插入文档数据

如何解决AWS Lambda + Firestore 数据库:add() 未在集合中插入文档数据

我正在尝试在 Nodejs 中的 AWS Lambda 上使用 Firestore。下面是数据库连接的初始化部分:

var admin = require('firebase-admin');
var serviceAccount = JSON.parse(process.env.cred);
admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),});
var db = admin.firestore();

但是每当我尝试插入操作时,它都不会将数据插入“测试”集合中。

插入代码

async (events,context) => {
    try {            
              var firestoreResult = await db.collection('packagescan12').add({
                                    packageId: scan.packageId,status: "unsynced",timestamp: new Date()
               });                            
               console.log('Added document with ID: ',firestoreResult.id);
    } catch(err) {                    
               console.log("Error in inserting: ",err);
    };
}

在日志中,它说 'Added document with ID: undefined'

编辑

正如 Frank van Puffelen 给出的答案所强调的那样,初始化应用程序不需要 databaseURL

在循环中插入两个文档时来自 CloudWatch 的日志:

Error in inserting:  Error: 4 DEADLINE_EXCEEDED: Deadline exceeded
    at Object.callErrorFromStatus (/opt/nodejs/node_modules/@grpc/grpc-js/build/src/call.js:31:26)
    at Object.onReceiveStatus (/opt/nodejs/node_modules/@grpc/grpc-js/build/src/client.js:176:52)
    at Object.onReceiveStatus (/opt/nodejs/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:342:141)
    at Object.onReceiveStatus (/opt/nodejs/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:305:181)
    at /opt/nodejs/node_modules/@grpc/grpc-js/build/src/call-stream.js:124:78
    at processticksAndRejections (internal/process/task_queues.js:79:11)
Caused by: Error
    at WriteBatch.commit (/opt/nodejs/node_modules/@google-cloud/firestore/build/src/write-batch.js:426:23)
    at DocumentReference.create (/opt/nodejs/node_modules/@google-cloud/firestore/build/src/reference.js:285:14)
    at CollectionReference.add (/opt/nodejs/node_modules/@google-cloud/firestore/build/src/reference.js:2021:28)
    at /var/task/index.js:170:80
    at processticksAndRejections (internal/process/task_queues.js:97:5)
    at async AsyncIterableX.[Symbol.asyncIterator] (/opt/nodejs/node_modules/ix/asynciterable/operators/map.js:18:28)
    at async Object.toArray (/opt/nodejs/node_modules/ix/asynciterable/toarray.js:18:22) {
  code: 4,details: 'Deadline exceeded',Metadata: Metadata { internalRepr: Map {},options: {} },note: 'Exception occurred in retry method that was not classified as transient'
}

解决方法

然后我尝试在浏览器中打开 databaseURL:“https://database_id_here.firebaseio.com”,它在浏览器中显示“未找到”作为响应。

这是预期的行为。 Firebase 有两个数据库:Cloud Firestore 和实时数据库。您的代码使用的是 Firestore API,而 URL 用于实时数据库,显然从未为此项目创建。

由于您只是尝试在代码中使用 Firestore,因此未创建实时数据库这一事实不是问题。事实上,我建议您从代码中删除该 URL,因为它不是必需的,而且由于它会使您感到困惑,因此可能会使其他人感到困惑。

要查看您的 Firestore 数据库,请转到 htts://firebase.google.com/console,选择项目,然后在左侧导航栏中选择 Firestore。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?