Var Lägger Jag Konfigurationer? – En enkel Guide i Nod.JS
tl;dr: kolla in koden repo på https://github.com/teamzerolabs/config-service-reference.
troligtvis ja. Så länge ditt program ansluter eller ringer till fjärrslutpunkter måste det Hämta säkerhetsuppgifterna någonstans.
det finns många olika sätt att ladda dessa referenser i programmet:
Nivå 1: Hårdkod det i själva textfilen — det händer vanligtvis på en fredag eller för människor som just börjar. Referensrepo bör hjälpa dig att ha kod som du kan dra in för att använda istället för att göra detta.
nivå 2: laddar den från processen.env-objekt på den plats där anslutningen händer — det här är bättre än hårdkodning, men med tiden gör miljövariabeln lite svår att spåra. Eftersom du inte kan gå till en enda fil för att hitta alla refererade miljövariabler.
nivå 3: Ladda alla miljökonfigurationer från en enda fil — detta finns i den här artikeln och kodexemplet! Detta ger dig fördelen av att veta var du ska gå för att slå upp konfigurationer och låta programmet misslyckas tidigt om dåliga värden levererades.
Nivå 4: Vrid konfigurationsskriptet till en tjänst — genom att göra det får vi möjlighet att göra andra intressanta saker: typkontroll av laddade värden och laddning av ytterligare konfigurationer från S3 eller Databas innan annan initialiseringskod körs.
innan du börjar
- ha en nod.JS runtime ready (Version > 10)
- få Postman om du inte har det — Alternativt kan du använda webbläsaren eller krulla för att träffa Api.
- kolla in https://github.com/teamzerolabs/config-service-reference i ditt lokala utrymme.
- har en MySQL igång: Jag har inkluderat en docker-compose-fil i mappen
db-setup
, du kan snurra upp genom att gå dit och köradocker-compose up -d
.
ett snabbt exempel-minsta Boktjänst som returnerar böcker lagrade i MySQL-databasen
i den första mappen node-starthere
har vi två filer:
- main.js-det är här vi ställer in
express
– servern för att betjäna begäran pålocalhost:3000/books
- modeller/index.js-vi kommer att ansluta till MySQL med
mysql2
ochsequelize
. - kör
yarn start
för att komma igång.
du kan se hur databasuppgifterna för närvarande lagras i models/index.js
:
nackdelen med hårdkodningsdatabasuppgifter
- det är inte säkert — någon som checkar ut det offentliga arkivet kommer nu att veta för mycket, särskilt om din databasinstans är Offentlig, är den nu utsatt.
- det är svårt att arbeta med olika miljöer — om du behöver ansluta den här koden till test-eller produktionsdistributioner vill du inte göra kodändringar bara för distribution.
Steg#1 — Ladda var och en av dessa från miljövariabler
du kan läsa mer om miljövariabler här. Kärnan i det är att du kan skicka värden till det löpande programmet så här
detta tillvägagångssätt är bra om du har ett litet antal konfigurationer, men som vi alla vet kommer alla projekt som överlevde den första användningsmånaden att börja integreras med fler tjänster. (Ett nyligen 4 månaders projekt av mig har 40 variabler! Tänk dig att skriva ut dem för garnstart uttalandet ovan, Det är för mycket).
steg # 2-Ladda miljövariabler vid körning för lokal utveckling före användning.
lyckligtvis finns det ett paket som kommer att rädda oss från att skriva ut variablerna om och om igen. Det kallas dotenv
. Du använder dotenv så här:
Sätt din kod under src och skapa en konfigurationsmapp och skapa en .env
– fil inuti där:
DATABASE_URL=localhost
DATABASE_PORT=3306
DATABASE_USERNAME=root
DATABASE_PASSWORD=dIKnUfyfUPURi9irSplTOqGO4OtE0
DATABASE_NAME=configexample
och dotenv.config
laddar variablerna i textfilerna till process.env
, nu kan du hoppa över att skriva ut variablerna på yarn start
!
steg # 3-Bekvämlighetsmetoder för att analysera värden och avsluta tidigt om de saknas
det enda som är farligare än ett felkonfigurerat program är ett felkonfigurerat program som körs i flera månader.
om vi glömde att göra filen .env
eller lägga dåliga värden i den, vill vi helst veta så tidigt som möjligt. Att köra kod med ofullständig eller fel konfiguration gör det svårt att felsöka.
om du tittar på den andra mappen node-with-config-service
kan du se att följande verktygsmetoder läggs till och används för att analysera variablerna:
och vi skriver om avsnittet databasanslutning till detta:
programmet kommer nu att avslutas tidigt med fel om miljövariabler saknas, och du kan lita på ett statiskt konfigurationsobjekt som finns var som helst i programmet!
det finns ytterligare två tillägg till detta tillvägagångssätt-Du kan tillämpa samma mönster i TypeScript och gå ett steg längre genom att skapa en faktisk hjälpartjänst i NestJS. Båda ingår i git repo. Vi kommer att täcka dessa i en framtida TypeScript + NestJs artikel!