Hvor Setter Jeg Konfigurasjoner? – En Enkel Guide I Node.JS

Jack Yeh

Følg

1. Feb 2020 * 6 min lese

Forbedre Kode Repository Kvalitet ved å følge denne koding mønster!

tl;dr: Sjekk ut koden repo på https://github.com/teamzerolabs/config-service-reference.

mest sannsynlig ja. Så lenge programmet kobler til eller ringer til eksterne endepunkter, må det få sikkerhetsinformasjonen fra et sted.

det er mange forskjellige måter å laste disse legitimasjonene inn i programmet:

Dette er vanlig I GitHub starter prosjekter, la oss håpe vi kan utdanne og redusere dette.

Nivå 1: Hard kode det i selve tekstfilen — dette skjer vanligvis på en fredag, eller for folk som bare starter. Referansen repo skal hjelpe deg med kode som du kan trekke inn for å bruke i stedet for å gjøre dette.

Nivå 2: Laster det fra prosessen.env-objektet pa stedet der forbindelsen skjer — Dette er bedre enn hardkoding, men over tid gjor miljovariabelen litt vanskelig a spore. Fordi du ikke kan gå til en enkelt fil for å finne alle de refererte miljøvariablene.

Nivå 3: Last alle miljøkonfigurasjonene fra en enkelt fil-Dette er gitt i denne artikkelen og kodeeksemplet! Dette gir deg fordelen av å vite hvor du skal gå for å slå opp konfigurasjoner, og la programmet mislykkes tidlig hvis dårlige verdier ble levert.

Nivå 4: Gjør konfigurasjonsskriptet til en tjeneste – ved å gjøre det får vi muligheten til å gjøre andre interessante ting: typekontroll av lastede verdier og lasting av flere konfigurasjoner Fra s3 eller database, før annen initialiseringskode kjører.

Før du starter

  • Har Du En Node.JS runtime klar (Versjon > 10)
  • Få Postman hvis du Ikke Har-Alternativt kan du bruke nettleseren eller krølle for å treffe Api.
  • Sjekk ut https://github.com/teamzerolabs/config-service-reference inn i ditt lokale område.
  • Har En MySQL oppe: jeg har tatt med en docker-compose-fil i mappen db-setup, du kan spinne opp ved å gå dit og kjøre docker-compose up -d .

Et Raskt Eksempel-Minimumsboktjeneste som returnerer bøker lagret i MySQL-databasen

3 gode bøker!

i den første mappen node-starthere har vi to filer:

  • main.js-Det er her vi setter opp express – serveren for å betjene forespørselen på localhost:3000/books
  • modeller/indeks.js-Vi vil koble Til MySQL med mysql2 og sequelize.
  • Kjør yarn start for å komme i gang.

Du kan se hvordan databasens legitimasjon er lagret imodels/index.js :

det er hardt kodet her, men vi kan gjore det bedre.

Ulempen med Hard coding Database credentials

  • Det er ikke sikkert — Alle som sjekker ut det offentlige depotet vil nå vite for mye, spesielt hvis databaseforekomsten din er offentlig, er den nå utsatt.
  • det er vanskelig å arbeide med forskjellige miljøer-Hvis du trenger å koble denne koden til testing eller produksjonsdistribusjoner, vil du ikke gjøre kodeendringer bare for distribusjon.

Trinn # 1-Last hver av disse fra miljøvariabler

du kan lese mer om miljøvariabler her. Kjernen i det er at du kan overføre verdier til det løpende programmet som dette

Denne tilnærmingen er bra hvis Du har et lite antall konfigurasjoner,men som vi alle vet, vil noen prosjekter som overlevde den første måneden av bruk, begynne å integrere med flere tjenester. (Et nylig 4 måneders prosjekt av meg har 40 variabler ! Tenk deg å skrive dem ut for garnstart-setningen ovenfor, det er for mye).

Trinn # 2-Last Miljøvariabler ved kjøretid for lokal utvikling før bruk.

Heldigvis er Det En pakke som vil redde oss fra å skrive ut variablene om og om igjen. Det kalles dotenv . Du bruker dotenv slik:

Sett koden din under src, og lag en config-mappe, og opprett en .env – fil der inne:

DATABASE_URL=localhost
DATABASE_PORT=3306
DATABASE_USERNAME=root
DATABASE_PASSWORD=dIKnUfyfUPURi9irSplTOqGO4OtE0
DATABASE_NAME=configexample

og dotenv.config vil laste variablene i tekstfilene til process.env, nå kan du hoppe over å skrive ut variablene på yarn start!

Trinn # 3-Bekvemmelighetsmetoder for å analysere verdier og avslutte tidlig hvis de mangler

det eneste som er farligere enn et feilkonfigurert program, er et feilkonfigurert program som kjører i flere måneder.

hvis vi glemte å lage .env – filen, eller sette dårlige verdier inn i den, vil vi helst vite så tidlig som mulig. Kjører kode med ufullstendig eller feil konfigurasjon gjør feilsøking vanskelig.

hvis du ser på den andre mappen node-with-config-service, kan du se at følgende verktøymetoder legges til og brukes til å analysere variablene:

Og vi omskriver databasetilkoblingsdelen til dette:

programmet vil nå avslutte tidlig med feil hvis miljøvariabler mangler, og du kan stole på et statisk konfigurasjonsobjekt som eksisterer fra hvor som helst i programmet!

det er to utvidelser til denne tilnærmingen — Du kan bruke de samme mønstrene I TypeScript, Og gå et skritt videre ved å sette opp en faktisk hjelpetjeneste I NestJS. Begge er inkludert i git repo. Vi vil dekke disse i en fremtidig TypeScript+NestJs artikkel!