ค้นหาเว็บไซต์

node.js - Firebase Angular 4 เริ่มต้นตามสภาพแวดล้อมของ node


ฉันได้สร้างโปรเจกต์ Angular 4 ของฉันโดยใช้ Angular CLI ฉันกำลังปรับใช้แอปของฉันบน Heroku ฉันได้สร้าง Heroku Pipelines สำหรับสภาพแวดล้อม development และ production ฉันมีฐานข้อมูล Firebase สองตัวคือ development และ production และฉันต้องการให้แอป Angular 2 ของฉันเชื่อมต่อกับฐานข้อมูล Firebase ตามตัวแปรการกำหนดค่าของ Heroku

ฉันค้นหาในกูเกิลและพบว่าคำตอบนี้มีประโยชน์ตามที่ @yoni-rabinovitch แนะนำให้ส่งคำร้อง HTTP บนเซิร์ฟเวอร์น็อดเพื่อตรวจสอบสภาพแวดล้อมเมื่อแอปเริ่มทำงาน

ฉันเป็นผู้เริ่มต้นใน Angular 4 และ TypeScript และทั้งหมดที่ฉันต้องการทำคือการส่งคำขอ HTTP และเริ่มต้นโมดูล Firebase ตามการตอบสนอง

app.module.ts

import { environment } from '../environments/environment';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    FormsModule,
    ReactiveFormsModule,
    BrowserAnimationsModule,
    AngularFireModule.initializeApp(environment.firebase)
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}

ความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างสูง

คำตอบ #1

ฉันต้องสร้าง API บนเซิร์ฟเวอร์ของฉันและตั้งค่าฟังก์ชันด้านล่างในไฟล์ environments.ts

export let environment: any = {
  production: false,
  firebase: {...}
};    

export const setEnvironment = async () => {
      try {
        const response = await fetch('api/checkEnvironment');
        const json = await response.json();
        if (json.data?.isPROD) {
          // Prod Environment
          environment = {
            production: true,
            firebase: {...}
            };
        }
        
      } catch (error) {
        throw error;
      }
    };

และเรียกมันจากไฟล์ main.ts

import {
  environment,
  setEnvironment,
} from './environments/environment';
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { FIREBASE_OPTIONS } from '@angular/fire';

(async () => {
  await setEnvironment();

  if (environment.production) {
    enableProdMode();
  }

  platformBrowserDynamic([
    {
      provide: FIREBASE_OPTIONS,
      useValue: environment.firebase,
    },
  ])
    .bootstrapModule(AppModule)
    .catch((err) => console.error(err));
})();

คำตอบ #2

คุณสามารถสร้างฟังก์ชันเพื่อรับการตั้งค่าได้:

import { environment } from '../environments/environment';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    FormsModule,
    ReactiveFormsModule,
    BrowserAnimationsModule,
    AngularFireModule.initializeApp(AppModule.getFirebaseConfig())
  ],
  bootstrap: [AppComponent]
})
export class AppModule {
  static getFirebaseConfig(): FirebaseAppConfig {
    // do http request

    // return correct correct configuration depending on http request
    return environment.firebase;
  }
}

บทความที่เกี่ยวข้อง