Модуль '@ google-cloud / firestore' не указан как зависимость в package.json - PullRequest
0 голосов
/ 03 марта 2019

Я использую TypeScript для написания своих облачных функций Firebase .В моем коде мне нужно ссылаться на типы данных firestore, такие как CollectionReference, QuerySnapshot и т. Д. Например:

export const Employee: CollectionReference = admin.firestore().collection('Master/Admin/Employees');
or
async function convertToCsv(snapshot: QueryDocumentSnapshot[])

Чтобы использовать эти типы в моем коде, я использую следующие строки в верхней части файла (.ts):

import { QueryDocumentSnapshot, Timestamp, Query, CollectionReference } from '@google-cloud/firestore';

Этот код прекрасно работает, когда я запускаю функцию firebase локально на моем ПК , используя:

Служба firebase - только функции

Но когда я пытаюсь развернуть тот же код на моем сервере Firebase, я получаю следующую ошибку tslint, и развертывание кода завершается неудачей.

Module '@google-cloud/firestore' is not listed as dependency in package.json

, если я добавляю зависимость в package.json

"dependencies": {
    "body-parser": "^1.18.3",
    ...
    "@google-cloud/firestore": "~1.0.1"
  },

Мои функции развернуты, но при выполнении я получаю следующую ошибку:

Error: Argument "value" is not a valid QueryValue. Detected an object of type "Timestamp" that doesn't match the expected instance. Please ensure that the Firestore types you are using are from the same NPM package.
    at Validator.(anonymous function).err [as isQueryValue] (/user_code/node_modules/firebase-admin/node_modules/@google-cloud/firestore/build/src/validate.js:93:27)
    at Query.where (/user_code/node_modules/firebase-admin/node_modules/@google-cloud/firestore/build/src/reference.js:916:25)
    at /user_code/lib/services/reports/index.js:53:22

Строка скомпилированного сценария Java, в которой происходит сбой (см. **):

const firestore_1 = require("@google-cloud/firestore");
let query = collection
                    .where('divisionCode', '==', divisionCode)
                    **.where('zzLastUpdateOn', '>=', firestore_1.Timestamp.fromDate(startDate))**
                    .where('zzLastUpdateOn', '<=', firestore_1.Timestamp.fromDate(endDate))
                    .where('zzIsDeleted', '==', false);

Я действительно понятия не имею, что здесь делать, пожалуйста, помогите.Пожалуйста, знайте, что я новичок в мире TypeScript и JavaScript.

Пожалуйста, знайте, что другие функции в том же проекте, где я добавляю значение в поле Timestamp, работают нормально.И эта функция также прекрасно работает в режиме симуляции облачной функции на рабочем столе (локальный хост).

Ваша помощь будет оценена по достоинству !!!

1 Ответ

0 голосов
/ 03 марта 2019

Следующее изменение в моем коде помогло решить проблему.

Вместо " Timestamp " я теперь использую " firestore.Timestamp ".Это изменение помогло мне продвинуться дальше в моей разработке.

Теперь мой код выглядит следующим образом:

Код TypeScript:

let query: Query = collection
                .where(...)
                .where('zzLastUpdateOn', '>=', firestore.Timestamp.fromDate(startDate))
                .where('zzLastUpdateOn', '<=', firestore.Timestamp.fromDate(endDate))
                .where(...);

И сгенерированный код сценария Java:

let query = collection
                    .where(...)
                    .where('zzLastUpdateOn', '>=', firebase_admin_1.firestore.Timestamp.fromDate(startDate))
                    .where('zzLastUpdateOn', '<=', firebase_admin_1.firestore.Timestamp.fromDate(endDate))
                    .where(...);

Мое предложение основано на запросе https://stackoverflow.com/a/52609487/6943737.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...