Detaillierte Erläuterung der Konfiguration und Serialisierung von Nest.js-Umgebungsvariablen

Detaillierte Erläuterung der Konfiguration und Serialisierung von Nest.js-Umgebungsvariablen

Eine kurze Beschreibung der Umgebungsvariablenkonfiguration

Das Programm erfordert in verschiedenen Umgebungen unterschiedliche Umgebungsvariablen. Beispielsweise erfordern die Produktionsumgebung, die Testumgebung und die Entwicklungsumgebung unterschiedliche Datenbankinformationen: Linkadresse, Linkportnummer, Anmeldebenutzername und kennwortbezogene Informationen. Um dieses Problem zu lösen, müssen entsprechende Vorgänge durchgeführt werden.

Der beste Ansatz in Nest besteht darin, ein ConfigModule zu erstellen, das einen ConfigService bereitstellt, in den Sie umgebungsspezifische .env-Dateien laden. Nest stellt @nestjs/config standardmäßig bereit.

Konfiguration

Das npm-Ökosystem verfügt über viele zugehörige Abhängigkeitspakete, beispielsweise das einfachste:

Garn hinzufügen Dotenv-Flow
Garn hinzufügen @types/dotenv-flow -D

Nach der Installation verwenden Sie es direkt in main.ts:

importiere * als dotenv von „dotenv-flow“

/**
 * .env-Umgebung importieren * https://www.npmjs.com/package/dotenv-flow
 */
dotenv.config()

Sie können die entsprechenden Umgebungsvariablen .env verwenden, verwenden Sie jedoch das offiziell empfohlene Paket: @nestjs/config:

Garn hinzufügen @nestjs/config

Konfigurieren Sie die .env-Analyse der Umgebungsvariablen in der statischen Methode forRoot in app.module.ts:

importiere { Modul } von '@nestjs/common'
importiere { ConfigModule } aus '@nestjs/config'

@Modul({
 Importe: [ConfigModule.forRoot()]
})
Exportklasse AppModule {}

Erstellen Sie dann eine neue .env-Datei im Stammverzeichnis des Projekts:

DATABASE_USER=
DATABASE_PASSWORD=
DATABASE_NAME=
DATABASE_PORT=
DATABASE_HOST=

Benutzerdefinierter Umgebungspfad

Wenn .env für Produktions-, Test- und Entwicklungsumgebungen verfeinert werden muss, kann es wie folgt konfiguriert werden:

ConfigModule.forRoot({
 envFilePath: ['.env.development.local', '.env.development'],
})

Diejenige, die früher sortiert wurde, hat die höchste Priorität, aber das Festlegen der Umgebungsvariablen im Startbefehl hat die höchste Priorität, zum Beispiel:

export DATABASE_USER=root && nest start

Benutzerdefinierte Konfigurationsdateien

Bei komplexen Projekten müssen Sie die verwendeten konfigurierbaren Variablen sammeln, z. B. durch Erstellen einer neuen Datei src/config/configuration.ts:

Standard exportieren () => ({
 Port: parseInt(Prozess.Umgebung.PORT, 10) || 3000,
 Datenbank: {
  Host: Prozess.Umgebung.DATABASE_HOST || 'localhost',
  Port: parseInt(Prozess.Umgebung.DATABASE_PORT, 10) || 3306
 }
})

Laden Sie es dann in ConfigModule.forRoot:

Konfiguration aus „./config/configuration“ importieren

@Modul({
 Importe: [
  ConfigModule.forRoot({
   laden: [Konfiguration]
  })
 ]
})
Exportklasse AppModule {}

Lesen von Konfigurationsvariablen

Wenn Sie zugehörige Konfigurationsvariablen lesen müssen, müssen Sie ConfigService verwenden und es in die verwendete *.module.ts-Datei einführen:

@Modul({
 Importe: [Konfigurationsmodul],
 // ...
})

Wenn viele Stellen beteiligt sind, ist es mühsam, jedes Modul einzeln zu importieren. Sie können dies in der obigen Datei app.module.ts tun.

Fügen Sie ein Feld hinzu:

Konfiguration aus „./config/configuration“ importieren

@Modul({
 Importe: [
  ConfigModule.forRoot({
   isGlobal: wahr,
   laden: [Konfiguration]
  })
 ]
})
Exportklasse AppModule {}

Fügen Sie es dann in den Konstruktor ein:

importiere { ConfigService } aus '@nestjs/config'

Konstruktor (privater Konfigurationsdienst: Konfigurationsdienst) {}

Erhalten Sie Konfigurationsvariablen wie:

const dbUser = this.configService.get<string>('DATABASE_USER')
const dbHost = this.configService.get<string>('database.host')

Serialisierung

Serialisierung bezeichnet den Vorgang, bevor ein Programm ein Objekt in einer Netzwerkantwort zurückgibt und sendet. Die bereitgestellten Informationen müssen konvertiert und bereinigt werden, bevor sie an den Client gesendet werden können: Wenn beispielsweise ein Benutzer abgefragt wird, können die aktuellen Benutzerentitätsinformationen im Allgemeinen zurückgegeben werden, die darin enthaltenen Kennwortinformationen können jedoch nicht an den Client gesendet werden. Daher müssen hier einige Konvertierungen vorgenommen werden.

Glücklicherweise bietet Nest ein sehr nützliches Paket namens Class-Transformer:

Garn fügt Klassentransformator hinzu

Beispielsweise schließen die folgenden Benutzerentitätsinformationen Kennwortinformationen aus:

importiere { Exclude } von 'Klassentransformator'

exportiere Klasse UserEntity {
 ID: Nummer
 Vorname: Zeichenfolge;
 Nachname: Zeichenfolge;

 @Ausschließen()
 Passwort: Zeichenfolge;

 Konstruktor(partiell: Partiell<Benutzerentität>) {
  Objekt.zuweisen(dies, teilweise);
 }
}

Verarbeiten Sie anschließend die Abfragebenutzermethode im Controller:

@UseInterceptors(KlasseSerializerInterceptor)
@Get(':id')
findOne(@Param('id') id: Zeichenfolge): Promise<Benutzerentität> {
 gib this.userService.findOne(id) zurück
}

Bei der letzten Abfrage wird die Passwortanzeige weggelassen.

Zusammenfassen

Dies ist das Ende dieses Artikels über die Konfiguration und Serialisierung von Umgebungsvariablen in Nest.js. Weitere verwandte Inhalte zur Konfiguration von Umgebungsvariablen in Nest.js finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

<<:  Der Unterschied zwischen dem Dezimaltyp und dem Float Double in MySQL (ausführliche Erklärung)

>>:  So installieren Sie Nginx in CentOS7 und konfigurieren den automatischen Start

Artikel empfehlen

Methoden für JavaScript-String-Objekte

Inhaltsverzeichnis Methoden des String-Objekts Me...

JavaScript zur Implementierung der mobilen Signaturfunktion

In diesem Artikel wird der spezifische JavaScript...

Implementierung der Validierungsregel für Vue Element-ui-Formulare

Inhaltsverzeichnis 1. Einleitung 2. Eingabemodus ...

Probleme und Vorsichtsmaßnahmen beim Festlegen von maxPostSize für Tomcat

1. Warum maxPostSize festlegen? Der Tomcat-Contai...

Tutorial zur Installation und Konfiguration von MySQL für Mac

In diesem Artikel finden Sie das MySQL-Installati...

MySQL 8.x MSI-Version Installations-Tutorial mit Bildern und Text

1. MySQL herunterladen Offizielle Website-Downloa...

Analysieren Sie den Unterschied zwischen berechnet und beobachtet in Vue

Inhaltsverzeichnis 1. Einführung in die Computert...

MySQL versteht kurz, wie "order by" funktioniert

Zum Sortieren ist „order by“ ein Schlüsselwort, d...

Beispielcode für die Verwendung von @media in CSS3 zur Anpassung einer Webseite

Heutzutage wird die Bildschirmauflösung von Compu...

CSS3 implementiert den Beispielcode der NES-Spielekonsole

Ergebnisse erzielenImplementierungscode html <...

Tutorial-Diagramm zur Installation von Zabbix2.4 unter Centos6.5

Die feste IP-Adresse des Centos-DVD1-Versionssyst...

Detaillierte Erklärung zum MySQL-Dateispeicher

Was ist ein Dateisystem Wir wissen, dass Speicher...