Ошибка функции Firebase Cloud в Firestore: не простой объект JavaScript

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

#node.js #огневая база #google-облако-firestore #google-cloud-функции

Вопрос:

Я использую Google Vision API и облачную функцию firebase для некоторых рукописных текстовых документов, которые затем сохраняются в Firestore.

Я следую руководству «Обнаружение рукописного ввода на изображениях» здесь: https://cloud.google.com/vision/docs/handwriting#detect_document_text_in_a_remote_image

Проблема, с которой я столкнулся, заключается в том, что я, похоже, не могу сохранить текстовую полезную нагрузку в firestore. Я вижу данные, поступающие в облачные журналы, но затем я получаю сообщение об ошибке:

imageTagger.js облачная функция:

ошибка в этой функции Ошибка: значение для аргумента «данные» не является допустимым документом Firestore. Ввод — это не простой объект JavaScript.

Вот моя облачная функция. Кто-нибудь что-нибудь заметил?

imageTagger.js

 import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'

import * as vision from '@google-cloud/vision'
// Instantiate a vision client
const client = new vision.ImageAnnotatorClient()

const bucketName = 'demobucket'

export const imageTagger = functions.storage
  .bucket(bucketName)
  .object()
  .onFinalize(async (object) => {
    // return console.log('objectmetadata: ', object)
    try {
      const fileName = object.name

      const imageUri = `gs://${bucketName}/${fileName}` // format required to send imageURLs to Google Vision
      const [result] = await client.documentTextDetection(imageUri)
      const fullTextAnnotation = result.fullTextAnnotation
      const docRef = admin.firestore().collection('photosText').doc('test')
      return docRef.set(JSON.stringify(fullTextAnnotation.text))
    } catch (error) {
      return console.error('error in this function', error)
    }
  })
 

Ответ №1:

При вызове JSON.stringify вы получаете обратно строку. И хотя строка является допустимым значением для поля в Firestore, вы пытаетесь присвоить всему документу значение string, что невозможно:

 return docRef.set(JSON.stringify(fullTextAnnotation.text))
 

Вы захотите установить для определенного поля это значение:

 return docRef.set({ text: JSON.stringify(fullTextAnnotation.text) })