Eine kurze Beschreibung der UmgebungsvariablenkonfigurationDas 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. KonfigurationDas 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 UmgebungspfadWenn .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 KonfigurationsdateienBei 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 KonfigurationsvariablenWenn 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') SerialisierungSerialisierung 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. ZusammenfassenDies 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
Inhaltsverzeichnis Methoden des String-Objekts Me...
In diesem Artikel wird der spezifische JavaScript...
1. Referenzielle Integrität Referenzielle Integri...
Inhaltsverzeichnis 1. Einleitung 2. Eingabemodus ...
1. Warum maxPostSize festlegen? Der Tomcat-Contai...
In diesem Artikel finden Sie das MySQL-Installati...
1. MySQL herunterladen Offizielle Website-Downloa...
Inhaltsverzeichnis 1. Einführung in die Computert...
Zum Sortieren ist „order by“ ein Schlüsselwort, d...
Heutzutage wird die Bildschirmauflösung von Compu...
Ergebnisse erzielenImplementierungscode html <...
Wirkungsprüfungsadresse: Tourplan (uplanok.com) C...
Die feste IP-Adresse des Centos-DVD1-Versionssyst...
Was ist ein Dateisystem Wir wissen, dass Speicher...
Vorwort Nachdem ich lange Zeit verschiedene Mater...