Kam Mám Umístit Konfigurace? – Jednoduchý průvodce v uzlu.JS

Jack Yeh

Následovat

Feb 1, 2020 · 6 min číst

Zlepšení Kód Úložiště Kvality podle následující kódovací vzor!

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:

To je běžné v GitHub starter projektů, doufejme, že se můžeme vzdělávat a snížit.

Ú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

3 dobré knihy!

V první složce node-starthere máme dva soubory:

  • hlavní.js-zde nastavíme server express tak, aby sloužil požadavku na localhost:3000/books
  • modely / index.js-připojíme se do MySQL pomocí mysql2 a sequelize .
  • 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 :

To je pevně dané, ale můžeme dělat lépe.

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!