如何在AngularFire中访问非默认Firestore数据库
访问GCP中Firestore命名数据库(development)失败问题
我能正常访问GCP项目里的默认Firestore数据库(default),但无法访问名为development的命名数据库,尝试调整配置后仍无效。
当前配置
export const firebaseConfig = { apiKey: <apiKey>, authDomain: <authDomain>, projectId: <projectId>, storageBucket: <storageBucket>, messagingSenderId: <messagingSenderId>, appId: <appId>, databaseURL: "https://firestore.googleapis.com/v1/projects/<projectId>/databases/development/", measurementId: <measurementId>, databaseId: "development", }; export const environment = { production: false, firebaseConfig: firebaseConfig, databaseName: 'development', }; // 参考文档,默认databaseURL格式为 "https://firestore.googleapis.com/v1/projects/<projectId>/databases/(default)/"
app.module中的导入尝试
最初的导入方式:
AngularFireModule.initializeApp(environment.firebaseConfig,), AngularFirestoreModule
后续尝试过的导入方式:
AngularFireModule.initializeApp(environment.firebaseConfig, {name: environment.databaseName}),
以及:
AngularFireModule.initializeApp(environment.firebaseConfig, environment.databaseName),
浏览器访问databaseURL的提示
缺少路由标头。请按照格式
x-goog-request-params:project_id=pocketmechanic-2970f&database_id=development填写请求标头。
正确解决方法
核心说明
AngularFireModule.initializeApp的第二个参数是应用名称,并非数据库名称,之前的尝试方向错误。需要通过Firestore的专属配置项指定命名数据库ID。
方案1:Compat模式(兼容旧版API)
- 精简firebaseConfig,移除多余的
databaseURL和databaseId:
export const firebaseConfig = { apiKey: <apiKey>, authDomain: <authDomain>, projectId: <projectId>, storageBucket: <storageBucket>, messagingSenderId: <messagingSenderId>, appId: <appId>, measurementId: <measurementId>, };
- 在app.module中通过
SETTINGS提供者配置数据库ID:
import { AngularFireModule } from '@angular/fire/compat'; import { AngularFirestoreModule, SETTINGS } from '@angular/fire/compat/firestore'; @NgModule({ imports: [ AngularFireModule.initializeApp(environment.firebaseConfig), AngularFirestoreModule ], providers: [ { provide: SETTINGS, useValue: { databaseId: environment.databaseName } } ] }) export class AppModule { }
方案2:模块化API(v9+)
import { provideFirebaseApp, initializeApp } from '@angular/fire/app'; import { provideFirestore, getFirestore } from '@angular/fire/firestore'; @NgModule({ providers: [ provideFirebaseApp(() => initializeApp(environment.firebaseConfig)), provideFirestore(() => { const firestore = getFirestore(); // 指定命名数据库ID (firestore as any)._settings.databaseId = environment.databaseName; return firestore; }) ] }) export class AppModule { }
内容的提问来源于stack exchange,提问作者chumberjosh
相关产品推荐
相关产品推荐

