Hvor Sætter Jeg Konfigurationer? – En simpel Guide i Node.JS
tl;dr: Tjek koden repo på https://github.com/teamzerolabs/config-service-reference.
sandsynligvis ja. Så længe dit program opretter forbindelse eller foretager opkald til eksterne slutpunkter, skal det få sikkerhedsoplysningerne et eller andet sted.
der er mange forskellige måder at indlæse disse legitimationsoplysninger i programmet:
Niveau 1: hård kode det i selve tekstfilen — dette sker normalt på en fredag eller for folk, der lige er startet. Referencerepo skal hjælpe dig med at have kode, som du kan trække ind for at bruge i stedet for at gøre dette.
niveau 2: indlæser det fra processen.env objekt på det sted, hvor forbindelsen sker — det er bedre end hård kodning, men over tid gør miljøet variabel lidt svært at spore. Fordi du ikke kan gå til en enkelt fil for at finde alle de refererede miljøvariabler.
niveau 3: Indlæs alle miljøkonfigurationer fra en enkelt fil — dette findes i denne artikel og kodeeksempel! Dette giver dig fordelen ved at vide, hvor du skal hen for at slå konfigurationer op, og lad programmet mislykkes tidligt, hvis der blev leveret dårlige værdier.
niveau 4: Gør konfigurationsskriptet til en tjeneste — ved at gøre det får vi muligheden for at gøre andre interessante ting: typekontrol af indlæste værdier og indlæsning af yderligere konfigurationer fra S3 eller database, før anden initialiseringskode kører.
før du starter
- har en Node.JS runtime klar (Version > 10)
- få postbud, hvis du ikke har gjort det-Alternativt kan du bruge bro.ser eller krølle til at ramme Api ‘ en.
- Tjek https://github.com/teamzerolabs/config-service-reference ind i dit lokale rum.
- jeg har inkluderet en docker-compose-fil i mappen
db-setup
, du kan spinde op ved at gå der og køredocker-compose up -d
.
et hurtigt eksempel — Minimum Bogtjeneste, der returnerer bøger, der er gemt i databasen
i den første mappe node-starthere
har vi to filer:
- main.js-det er her, vi opsætter
express
serveren til at betjene anmodningen pålocalhost:3000/books
- modeller/indeks.js-vi vil forbinde til Myskl med
mysql2
ogsequelize
. - Kør
yarn start
for at komme i gang.
du kan se, hvordan databasens legitimationsoplysninger i øjeblikket er gemt i models/index.js
:
ulempen med hard coding Database credentials
- det er ikke sikkert — nogen, der tjekker det offentlige arkiv, vil nu vide for meget, især hvis din databaseinstans er offentlig, er den nu udsat.
- det er vanskeligt at arbejde med forskellige miljøer — hvis du har brug for at forbinde denne kode til test-eller produktionsinstallationer, vil du ikke foretage kodeændringer kun til implementering.
Trin#1 — Indlæs hver af disse fra miljøvariabler
du kan læse mere om miljøvariabler her. Kernen i det er, at du kan overføre værdier til det kørende program som dette
denne tilgang er fint, hvis du har et lille antal konfigurationer, men som vi alle ved, vil alle projekter, der overlevede den første brugsmåned, begynde at integrere med flere tjenester. (En nylig 4 måneders projekt af mine har 40 variabler! Forestil dig at skrive dem ud for garnstartopgørelsen ovenfor, det er for meget).
Trin#2 — Indlæs miljøvariabler ved kørsel til lokal udvikling før brug.
heldigvis er der en pakke, der redder os fra at skrive variablerne igen og igen. Det hedder dotenv
. Du bruger dotenv som sådan:
Sæt din kode under src, og lav en konfigurationsmappe, og opret en .env
fil inde der:
DATABASE_URL=localhost
DATABASE_PORT=3306
DATABASE_USERNAME=root
DATABASE_PASSWORD=dIKnUfyfUPURi9irSplTOqGO4OtE0
DATABASE_NAME=configexample
og dotenv.config
indlæser variablerne i tekstfilerne i process.env
, nu Kan du springe over at skrive variablerne på yarn start
!
Trin#3 — Convenience metoder til at parse værdier og afslutte tidligt, hvis de mangler
det eneste farligere end en fejlkonfigureret program er en fejlkonfigureret program kører i månedsvis.
hvis vi glemte at lave filen .env
eller lægge dårlige værdier i den, vil vi ideelt set vide det så tidligt som muligt. At køre kode med ufuldstændig eller forkert konfiguration gør fejlfinding vanskelig.
hvis du ser på den anden mappe node-with-config-service
, kan du se, at følgende hjælpemetoder tilføjes og bruges til at analysere variablerne:
og vi omskriver databaseforbindelsesafsnittet til dette:
programmet afslutter nu tidligt med fejl, hvis miljøvariabler mangler, og du kan stole på et statisk konfigurationsobjekt, der findes hvor som helst i programmet!
der er yderligere to udvidelser til denne tilgang — Du kan anvende de samme mønstre i TypeScript og gå et skridt videre ved at oprette en faktisk hjælpertjeneste i NestJS. Begge er inkluderet i git repo. Vi vil dække disse i en fremtidig TypeScript + nestjs artikel!