Администратор Firebase ищет проект по умолчанию, отличный от того, над которым я сейчас работаю в локальной среде - PullRequest
0 голосов
/ 13 марта 2020

Я создаю эту облачную функцию в своей локальной среде, и мне нужно что-то сохранить в Firestore:

Вот как я инициализирую приложение firebase-admin:

myFunction. js

if (!adminHasInitialized) {
  console.log("INITIALIZING ADMIN APP");                    // THIS IS BEING LOGGED
  admin.initializeApp({
    credential: admin.credential.applicationDefault(),
  });
  adminHasInitialized = true;
}

И вот как я пытаюсь обновить мой Firestore:

await admin.firestore().collection("myCollection").doc("myDoc").update({
  ...
});

ПРИМЕЧАНИЕ: Я работаю на MY_PROJECT_1

И вот эта ошибка, которую я получаю:

детали: 'Нет документов для обновления: проекты / MY_PROJECT_2 / database / ( по умолчанию) / documents / myCollection / myDo c ',

ПРОБЛЕМА

Каким-то образом firebase-admin ищет в другой базе данных другой проект MY_PROJECT_2 , который у меня есть.

Когда я запускаю: firebase projects:list, вот что я получаю:

Project Display Name   │ Project ID                  │ Resource Location ID
MY_PROJECT_1           │ MY_PROJECT_1 (current)      │ us-central1
MY_PROJECT_2           │ MY_PROJECT_2                │ us-central1

Таким образом, текущий проект верен.

Также у меня есть этот файл, который я установил по умолчанию как MY_PROJECT_1

.firebaser c

{
  "projects": {
    "default": "MY_PROJECT_1"
  }
}

Я также пытался добавить URL-адрес БД при инициализации приложения, s:

admin.initializeApp({
  credential: admin.credential.applicationDefault(),
  databaseURL: "https://MY_PROJECT_1.firebaseio.com"
});

Но я продолжаю получать ту же ошибку.

ПРИМЕЧАНИЕ: Я запускаю эту функцию в своей локальной среде, используя babel-node через следующие команда:

npx babel-node functions/src/myFunction.js


ВОПРОС

Как firebase-admin получает проект по умолчанию, отличный от того, которым я сейчас занимаюсь работа над?


ОБНОВЛЕНИЕ 1

Я думаю, что firebase-admin получает конфигурацию по умолчанию из gcloud SDK, который установлен в моем P C.

От:

[C: \ Users \ USER \ AppData \ Roaming \ gcloud \ configurations \ config_default]

config_default:

[core]
account = my@email.com
project = MY_PROJECT_2     // MAYBE IT IS COMING FROM HERE

ОБНОВЛЕНИЕ 2

Пока единственное, что мне удалось заставить его работать, это:

admin.initializeApp({
  projectId: "MY_PROJECT_1",
  databaseURL: "https://MY_PROJECT_1.firebaseio.com"
});

Это дает мне правильный проект, когда я запускаю эту функцию локально.

1 Ответ

2 голосов
/ 13 марта 2020

Начиная с версии 1.0.0 Firebase SDK для облачных функций вам больше не нужно инициализироваться с помощью admin.initializeApp(functions.config().firebase);, см. Do c здесь , который объясняет, что:

firebase-admin теперь инициализируется без каких-либо параметров во время выполнения облачных функций.

Поэтому попробуйте:

if (!adminHasInitialized) {
  console.log("INITIALIZING ADMIN APP");                   
  admin.initializeApp();
  adminHasInitialized = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...