Kam Mám Umístit Konfigurace? – Jednoduchý průvodce v uzlu.JS
tl; dr: podívejte se na repo kódu na https://github.com/teamzerolabs/config-service-reference.
s největší pravděpodobností ano. Dokud se váš program připojuje nebo volá ke vzdáleným koncovým bodům, musí odněkud získat bezpečnostní pověření.
Existuje mnoho různých způsobů, jak načíst tyto přihlašovací údaje do programu:
Úroveň 1: pevný kód v samotném textovém souboru – To se obvykle děje v pátek nebo pro lidi, kteří právě začínají. Referenční repo by vám mělo pomoci mít kód, který můžete místo toho použít.
úroveň 2: načítání z procesu.env objekt v místě, kde spojení se děje — je To lepší, než tvrdé kódování, ale postupem času je proměnná prostředí trochu těžké sledovat. Protože nemůžete jít do jediného souboru a najít všechny odkazované proměnné prostředí.
úroveň 3: načíst všechny konfigurace prostředí z jednoho souboru-To je uvedeno v tomto článku a příklad kódu! To vám dává výhodu vědět, kam jít vyhledat konfigurace, a umožnit programu selhat brzy, pokud byly dodány špatné hodnoty.
Úroveň 4: Zapněte konfigurační skript do služby — Tím jsme získali schopnost dělat jiné zajímavé věci: typ-kontrola načtené hodnoty a načítání další konfigurace z S3 nebo databáze, před další inicializační kód běží.
než začnete
- mít uzel.JS runtime ready (verze > 10)
- získat pošťák, pokud jste tak neučinili-Alternativně, můžete použít prohlížeč nebo zvlnění zasáhnout Api.
- podívejte se na https://github.com/teamzerolabs/config-service-reference do místního prostoru.
- mít MySQL nahoru a běží: zahrnul jsem soubor docker-compose do složky
db-setup
, můžete točit nahoru tím, že tam a běžídocker-compose up -d
.
Rychlý Příklad — Minimální Book Služba, která vrátí knihy uložené v MySQL databázi
V první složce node-starthere
máme dva soubory:
- hlavní.js-zde nastavíme server
express
tak, aby sloužil požadavku nalocalhost:3000/books
- modely / index.js-připojíme se do MySQL pomocí
mysql2
asequelize
. - spusťte
yarn start
a začněte.
můžete vidět, jak databáze pověření jsou v současné době uloženy v models/index.js
:
Nevýhodou tvrdé kódování Databáze pověření
- To není bezpečné — Každý, mimo kontrolu veřejnosti úložiště bude nyní vědět, příliš mnoho, zvláště pokud vaše instance databáze je veřejné, je nyní vystavena.
- je těžké pracovat s různými prostředí — Pokud potřebujete připojit tento kód k testování nebo produkci nasazení, nechceš udělat změny kódu jen pro nasazení.
Krok#1 — Zatížení každé z těchto z proměnné prostředí
můžete Si přečíst více o proměnných prostředí. Podstata je, že můžete předat hodnoty do chodu program, jako je tento
Tento přístup je v pořádku, pokud máte malý počet konfigurací, ale jak všichni víme, žádné projekty, které přežily první měsíc používání se začne integrovat s více služeb. (Poslední 4 měsíční projekt má 40 proměnných! Představte si, že je napíšete pro výše uvedené prohlášení o zahájení příze, je to příliš mnoho).
Krok#2-načtěte proměnné prostředí za běhu pro místní vývoj před použitím.
naštěstí existuje balíček, který nám ušetří psaní proměnných znovu a znovu. Nazývá se dotenv
. Použití dotenv tak jako:
Dát svůj kód pod src, a udělat config složku, a vytvořit .env
soubor dovnitř:
DATABASE_URL=localhost
DATABASE_PORT=3306
DATABASE_USERNAME=root
DATABASE_PASSWORD=dIKnUfyfUPURi9irSplTOqGO4OtE0
DATABASE_NAME=configexample
A dotenv.config
načte proměnné v textových souborů do process.env
nyní můžete přeskočit psaní proměnné na yarn start
!
Krok#3 — Pohodlí metod analyzovat hodnoty a ukončit předčasně, pokud jsou chybějící
jediná věc mnohem nebezpečnější, než chyba v programu je chyba v běhu programu na konci měsíce.
pokud jsme zapomněli vytvořit soubor .env
nebo do něj vložit špatné hodnoty, v ideálním případě chceme vědět co nejdříve. Spuštění kódu s neúplnou nebo nesprávnou konfigurací ztěžuje řešení problémů.
Když se podíváte na druhou složku node-with-config-service
, můžete vidět, že tyto utility metody jsou přidány a použit k analýze proměnné:
A přepíšeme připojení databáze do této sekce:
program bude nyní ukončen brzy s chybami, pokud proměnné prostředí chybí, a můžete se spolehnout na statický konfigurační objekt existující odkudkoli v programu!
existují další dvě rozšíření tohoto přístupu — můžete použít stejné vzory v TypeScript a jít o krok dále nastavením skutečné pomocné služby v NestJS. Oba jsou součástí repo git. Pokryjeme je v budoucím článku TypeScript+NestJs!