如果未指定,Firebase Admin SDK/Firestore 从哪里获取其项目 ID?

问题描述 投票:0回答:1

我正在尝试调试为什么从笔记本电脑上的 Node.js 脚本写入本地 Firestore 模拟器在模拟器 GUI 中不可见,以及为什么 Node.js 脚本获取的数据与我在 GUI 中看到的数据不同。换句话说,Node.js 脚本似乎只是在本地访问不同的 Firestore 实例(它可以在关闭 Internet 的情况下工作),可能由模拟器针对不同的项目 ID 进行分区。

模拟器使用

firebase emulators:start --only functions,firestore

 运行,在 
http://127.0.0.1:4000/firestore/default/data/
 我看到由模拟函数添加的数据。主页确认了项目 ID,这显然是 Node.js 脚本
使用的。

Firebase emulator

下面是我的初始化代码:

import { initializeApp } from 'firebase-admin/app'; import { getFirestore } from 'firebase-admin/firestore'; for (const envVar of [ 'FIREBASE_CONFIG', // env var listed at https://firebase.google.com/docs/admin/setup#initialize-sdk 'GOOGLE_APPLICATION_CREDENTIALS', // env var listed at https://firebase.google.com/docs/admin/setup#initialize_the_sdk_in_non-google_environments 'GOOGLE_CLOUD_PROJECT', 'GCLOUD_PROJECT' // observed access while debugging with Deno ]) console.log(`${envVar}:`, process.env[envVar]); // all undefined // Connect to the emulator per https://firebase.google.com/docs/emulator-suite/connect_firestore#admin_sdks or https://cloud.google.com/firestore/docs/emulator#server_client_libraries process.env['FIRESTORE_EMULATOR_HOST'] = '127.0.0.1:8080'; // Initialize Cloud Firestore per https://firebase.google.com/docs/firestore/quickstart#initialize -> Node.js -> Initialize on your own server initializeApp(); const db = getFirestore();
就是这样。没有参数传递给 

initializeApp()

,我已经使用 Deno 运行脚本来查看它想要什么环境变量。唯一相关的就是上面的(其中有很多,再加上启动
/bin/sh
,但这是一个
不同的问题)。它也不会尝试读取 .firebaserc
firebase.json

Firebase/Firestore 如何确定在这种情况下使用什么项目 ID?

使用 Firestore 时,Firebase Admin SDK 仅封装
node.js firebase google-cloud-firestore firebase-admin
1个回答
0
投票
。 它公开了完全相同的功能和 API。

GCP 产品 SDK 使用通用库来查找项目 ID。 您可以在此处查看源代码:https://github.com/googleapis/google-auth-library-nodejs/blob/main/src/auth/googleauth.ts

/** * Obtains the default project ID for the application. * * Retrieves in the following order of precedence: * - The `projectId` provided in this object's construction * - GCLOUD_PROJECT or GOOGLE_CLOUD_PROJECT environment variable * - GOOGLE_APPLICATION_CREDENTIALS JSON file * - Cloud SDK: `gcloud config config-helper --format json` * - GCE project ID from metadata server */

如果您没有明确提供环境变量或在 GCP 产品中运行,那么它很可能使用
gcloud
的输出来查找默认项目 ID。

gcloud config config-helper --format json


© www.soinside.com 2019 - 2024. All rights reserved.