База данных AWS Lambda Firestore: add () не вставляет данные документа в коллекцию

#node.js #firebase #google-cloud-firestore #firebase-admin

# #node.js #firebase #google-облако-firestore #firebase-администратор

Вопрос:

Я пытаюсь использовать Firestore на AWS Lambda в Nodejs. Вот часть инициализации подключения к базе данных:

 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'

Редактировать

Как указано в ответе, данном Фрэнком ван Пуффеленом, 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'
}
 

Комментарии:

1. Пожалуйста, поделитесь своим кодом для вставки. Обратите внимание, что databaseURL: "https://database_id_here.firebaseio.com" это URL, соответствующий базе данных реального времени, а не Firestore.

2. @RenaudTarnec Я внес изменения, а также отметил информацию о databaseURL. Я также добавил некоторую информацию о том же в редактировании.

3. Вы не видите новый документ в консоли Firestore??

4. Нет, я этого не делаю, как я упоминал ранее, там написано добавлено с идентификатором: undefined

5. Из кода, которым вы поделились, он должен быть сохранен в БД. Опять же, обратите внимание, что в Firebase есть две разные службы баз данных. Будьте осторожны, чтобы не перепутать RTDB и Firestore при просмотре консоли. Вы должны поделиться всем кодом, чтобы мы могли вам помочь .

Ответ №1:

Затем я попытался открыть databaseURL: «https://database_id_here.firebaseio.com » в браузере, и он говорит «не найден» в качестве ответа в браузере.

Это ожидаемое поведение. Firebase имеет две базы данных: Cloud Firestore и базу данных реального времени. Ваш код использует API Firestore, в то время как URL-адрес предназначен для базы данных реального времени, которая, по-видимому, никогда не создавалась для этого проекта.

Поскольку вы пытаетесь использовать Firestore только в своем коде, тот факт, что база данных в реальном времени не была создана, не является проблемой. На самом деле, я бы рекомендовал удалить этот URL из кода, поскольку он не нужен, и поскольку он смутил вас, он может смутить других.

Чтобы просмотреть свою базу данных Firestore, перейдите по адресу htts://firebase.google.com/console, выберите проект, а затем выберите Firestore в левой навигации.

Комментарии:

1. О, я вижу, теперь это имеет смысл. Я подумал, что databaseURL это может быть неправильно, и это приводит к неправильной настройке подключения к базе данных, поэтому данные не вставляются в коллекцию. Поскольку это больше не требуется, я отредактировал вопрос. Является ли add () не «ожидающим» для вставки и просто игнорирующим операцию? Я также опубликовал журналы возникновения ошибки.