Var Lägger Jag Konfigurationer? – En enkel Guide i Nod.JS

Jack Yeh

följ

Feb 1, 2020 * 6 min läs

förbättra Code Repository kvalitet genom att följa detta kodningsmönster!

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:

Detta är vanligt i GitHub startprojekt, låt oss hoppas att vi kan utbilda och minska detta.

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öra docker-compose up -d.

ett snabbt exempel-minsta Boktjänst som returnerar böcker lagrade i MySQL-databasen

3 bra böcker!

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 och sequelize.
  • kör yarn start för att komma igång.

du kan se hur databasuppgifterna för närvarande lagras i models/index.js :

det är svårt kodat här, men vi kan göra bättre.

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!