You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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)

  1. 精简firebaseConfig,移除多余的databaseURL和databaseId:
export const firebaseConfig = {
  apiKey: <apiKey>,
  authDomain: <authDomain>,
  projectId: <projectId>,
  storageBucket: <storageBucket>,
  messagingSenderId: <messagingSenderId>,
  appId: <appId>,
  measurementId: <measurementId>,
};
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:13:12