问题描述
我正在尝试在 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。