Unde Pun Configurațiile? – Un ghid simplu în nod.JS

Jack Yeh

Urmărește

februarie 1 · 2020 * 6 min citit

îmbunătățiți calitatea depozitului de coduri urmând acest model de codificare!

tl;dr: Verificați codul repo la https://github.com/teamzerolabs/config-service-reference.

cel mai probabil da. Atâta timp cât programul dvs. se conectează sau efectuează apeluri către puncte finale la distanță, trebuie să obțină acreditările de securitate de undeva.

există multe moduri diferite de a încărca aceste acreditări în program:

acest lucru este comun în proiectele de pornire GitHub, să sperăm că putem educa și reduce acest lucru.

nivelul 1: codul greu în fișierul text în sine — acest lucru se întâmplă de obicei într-o vineri sau pentru persoanele care abia încep. Repo de referință ar trebui să vă ajute să aveți cod pe care îl puteți trage în a utiliza în loc de a face acest lucru.

nivelul 2: încărcarea acestuia din proces.obiect env în locul în care se întâmplă conexiunea — acest lucru este mai bun decât codificarea tare, dar în timp face ca variabila de mediu să fie puțin greu de urmărit. Pentru că nu puteți merge la un singur fișier pentru a găsi toate variabilele de mediu de referință.

nivelul 3: Încărcați toate configurațiile de mediu dintr — un singur fișier-acest lucru este furnizat în acest articol și exemplu de cod! Acest lucru vă oferă avantajul de a ști unde să mergeți pentru a căuta configurații și pentru a permite programului să eșueze devreme dacă au fost furnizate valori proaste.

nivelul 4: transformați scriptul de configurare într — un serviciu-procedând astfel, obținem capacitatea de a face alte lucruri interesante: verificarea valorilor încărcate și încărcarea configurațiilor suplimentare din S3 sau baza de date, înainte ca alt cod de inițializare să ruleze.

înainte de a începe

  • aveți un nod.JS runtime ready (Versiune > 10)
  • Obțineți Poștaș dacă nu ați făcut — o-alternativ, puteți utiliza browserul sau curl pentru a lovi Api-ul.
  • verificați https://github.com/teamzerolabs/config-service-reference în spațiul dvs. local.
  • aveți un MySQL în funcțiune: am inclus un fișier docker-compose în folderul db-setup, puteți roti mergând acolo și rulând docker-compose up -d.

un exemplu rapid – serviciu minim de carte care returnează cărțile stocate în baza de date MySQL

3 cărți bune!

în primul folder node-starthere, avem două fișiere:

  • principal.js — aici configurăm serverul express pentru a servi cererea la modelele/indexul localhost:3000/books
  • .js-ne vom conecta la MySQL cu mysql2 și sequelize.
  • rulați yarn start Pentru a începe.

puteți vedea modul în care acreditările bazei de date sunt stocate în prezent în models/index.js :

este greu de codificat aici, dar putem face mai bine.

dezavantajul acreditărilor bazei de date de codificare hard

  • nu este sigur — oricine verifică depozitul public va ști acum prea multe, mai ales dacă instanța bazei de date este publică, acum este expusă.
  • este dificil să lucrați cu medii diferite — dacă trebuie să conectați acest cod la implementări de testare sau producție, nu doriți să faceți modificări de cod doar pentru implementare.

Pasul#1 — Încărcați fiecare dintre acestea din variabilele de mediu

puteți citi mai multe despre Variabilele de mediu aici. Esența este că puteți trece valori în programul care rulează ca acesta

această abordare este în regulă dacă aveți un număr mic de configurații, dar, după cum știm cu toții, orice proiecte care au supraviețuit primei luni de utilizare vor începe să se integreze cu mai multe servicii. (Un proiect recent de 4 luni al meu are variabile 40! Imaginați-vă că le tastați pentru declarația de pornire a firelor de mai sus, este prea mult).

Pasul#2 — Încărcați variabilele de mediu în timpul rulării pentru dezvoltarea locală înainte de utilizare.

din fericire, există un pachet care ne va salva de la tastarea variabilelor de peste si peste. Se numește dotenv . Utilizați dotenv așa:

puneți codul sub src și creați un folder de configurare și creați un fișier .env în interiorul acestuia:

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

și dotenv.config va încărca variabilele din fișierele text în process.env, acum Puteți sări tastând variabilele la yarn start !

Pasul#3 — metode de comoditate pentru a analiza valorile și a ieși devreme dacă lipsesc

singurul lucru mai periculos decât un program configurat greșit este un program configurat greșit care rulează luni întregi.

dacă am uitat să facem fișierul .env sau să punem valori proaste în el, în mod ideal vrem să știm cât mai curând posibil. Rularea codului cu configurație incompletă sau greșită face dificilă depanarea.

dacă vă uitați la al doilea folder node-with-config-service, puteți vedea că următoarele metode de utilitate sunt adăugate și utilizate pentru a analiza variabilele:

și rescriem secțiunea Conexiune bază de date la aceasta:

programul va ieși acum devreme cu erori dacă variabilele de mediu lipsesc și puteți depinde de un obiect de configurare statică existent de oriunde din program!

există încă două extensii la această abordare — puteți aplica aceleași tipare în TypeScript și puteți merge mai departe prin configurarea unui serviciu de ajutor real în NestJS. Ambele sunt incluse în repo git. Vom acoperi aceste într-un viitor articol Typescript+NestJs!