Was ich an Nest.js wirklich liebe, ist, dass es ein leistungsstarkes, vollständiges Node.js-Framework ist, das Ihnen individuelle Komplettlösungen zum Erstellen bietet Backend-Anwendungen.
Es verfügt von Anfang an über eine integrierte Unterstützung für TypeScript und kombiniert Elemente von OOP (objektorientierte Programmierung), FP (funktionale Programmierung) und FRP (Functional Reactive Programming), wie es auf der offiziellen Website heißt.
Es hat auch Architektur von Anfang an, was für jemanden wie mich, der gerne mit gut strukturierten Architekturprojekten arbeitet, erstaunlich ist.
Allein die Dokumentation ist sehr beeindruckend und deckt jeden Aspekt ab, einschließlich der Festlegung von Umgebungsvariablen, aber für mich
Ich habe nicht ganz verstanden, wie man mehrere Umgebungen einrichtet.
Vielleicht, weil ich neu bei node.js und nestjs bin. Als ich jedoch im Internet nach Artikeln suchte, zeigten sie immer eine Möglichkeit, die Dotenv-Bibliothek direkt zu verwenden, anstatt Nestjs nativ zu verwenden, das Dotenv unter verwendet Haube.
Und nachdem ich viele Stunden lang Artikel neben der Dokumentation durchgesehen hatte, erarbeitete ich eine Lösung, die in Nestjs nativ ist, und dachte, ich würde sie teilen.
Erste
Nehmen wir an, wir benötigen zwei Umgebungen für unser Projekt 'dev' und 'prod'
und wir benötigen 2 Umgebungsvariablen pro Umgebung: PORT und DATABASE_URL.
1 – Erstellen Sie zwei .env-Dateien zum Speichern von PORT und DATABASE_URL und benennen Sie die Dateien ( .env.dev und .env.prod.)
PORT=3500 DATABASE_URL="file:./dev.db"`
2- Erstellen Sie eine Umgebungsvariable mit dem Namen NODE_ENV, aber dieses Mal werden wir sie nicht in einer .env-Datei speichern, sondern in Startskripte für Entwickler und Produkte einfügen.
Die Einstellung von NODE_ENV kann auf verschiedenen Plattformen (Windows, Mac oder Linux) unterschiedlich sein. Daher werden wir ein div-übergreifendes Paket installieren, damit wir Umgebungsvariablen plattformübergreifend festlegen können.
Installation mit npm
$ npm install --save-dev cross-env
oder mit pnpm
$ pnpm install --save-dev cross-env
Ändern Sie dann Ihre package.json-Skripts, um Cross-Env zu verwenden:
"scripts": { "start:dev": "cross-env-shell NODE_ENV=dev nest start --watch", "start:prod": "cross-env-shell NODE_ENV=prod node dist/main", }
Wenn Sie also jetzt Ihre Anwendung mit
ausführen
npm run start:dev
oder
pnpm run start:dev
Sie haben NODE_ENV=dev und können es in der gesamten Anwendung verwenden.
3- Damit Nestjs .env-Dateien lesen kann, müssen wir ConfigModule verwenden und es richtig konfigurieren, aber zuerst müssen wir es installieren.
npm
$ npm i --save @nestjs/config
pnpm
$ pnpm i --save @nestjs/config
4- Verwenden Sie ConfigModule:
@Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, envFilePath: `.env.${process.env.NODE_ENV}`, }), ], controllers: [AppController], providers: [AppService], }) export class AppModule {}
envFilePath: wird verwendet, um einen anderen Pfad für die .env-Datei anzugeben.
oder eine andere Datei als die Standard-.env-Datei lesen
.env.${process.env.NODE_ENV} wird übersetzt in .env.dev und
Wenn wir den Befehl
ausführen
npm run start:prod
.env.${process.env.NODE_ENV} würde übersetzt werden in .env.prod.
5- So greifen Sie auf unsere Umgebungsvariablen zu
Um auf Umgebungsvariablen zuzugreifen, verwenden wir ConfigModule.
Wir können es in main.ts
verwenden
async function bootstrap() { const app = await NestFactory.create(AppModule); const configService = app.get(ConfigService); const port = configService.get('PORT'); await app.listen(port); }
oder wenn wir es an einer anderen Stelle benötigen, verwenden wir Injektion.
Zum Beispiel
@Injectable() export class AppService { constructor(private configService: ConfigService) {} getHello(): string { return ( this.configService.get('DATABASE_URL') ); } }
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3