de Alexandre Levacher

Cum se organizează controlere Express pentru baze de coduri mari

Cum se organizeaza controlere Express pentru baze de coduri mari

Acum trei ani, am început să dezvolt un API Express.js pentru o companie. M-am întrebat care ar putea fi cea mai bună arhitectură de controlere pentru a rămâne organizat pe măsură ce baza de cod crește.

Influențat de Sails sau Rails și de cercetările mele, am ajuns să-mi creez propriul sistem. Nu am vrut să-mi supraîncărc proiectul folosind un cadru complet ca Sails, ci să aleg mai degrabă dependențe mai ușoare atunci când este nevoie.

Așa că am creat un sistem de organizare pentru controlerele aplicației pe care l-am asociat cu un încărcător de casă. De atunci, le-am îmbunătățit pe amândouă datorită experienței acumulate prin implementarea acestuia în alte proiecte.

Astăzi, sunt suficient de încrezător în această metodă pentru a o împărtăși, deoarece rezultatele sunt convingătoare.

Din câte știu, este folosit de câteva companii mari. Simplifică integrarea noilor dezvoltatori, deoarece facilitează citirea bazei de cod.

✅ Iată cum să configurați o arhitectură a controlerelor curate.

Structura

Dacă nu anticipați creșterea aplicației dvs., veți avea rapid o bază de cod neorganizată. Am conceput metoda de organizare pentru a avea o compatibilitate largă, ceea ce înseamnă că într-o zi nu veți fi prins într-un fel de caz de utilizare pe care nu îl puteți rezolva cu această metodă.

Configurați arborele de fișiere

  • Rute de grup în controlere
  • Creați foldere pentru fiecare controler
  • Creați un fișier de rutare în fiecare controler care descrie cale pentru fiecare traseu, metoda de apelare, se asociază opțional middleware, si nivelul de restricție.
  • Creați un fișier pentru acțiunile fiecărui controler care conține fișierul metoda de executat si mijlocii.
  • Creeaza o fișier spec pentru testare

Să vedem cum arată.

1611184265 450 Cum se organizeaza controlere Express pentru baze de coduri mari
? Exemplu de structură a controlerelor

Nu vă fie teamă să creați o mulțime de fișiere. Nu încetinește dezvoltarea și vă face baza de coduri îngrijită și aerisită. ✨

Încărcați-vă rutele

Pentru ca lucrurile să funcționeze urmând structura definită mai sus, trebuie să folosim un încărcător simplu pe care l-am creat: Lumie. Acesta va trece prin controlerele dvs., va citi fișierele de definiție și vă va încărca rutele.

Este un pachet mic, puteți verifica codarea sursei pe GitHub.

Rutare fișiere

Au fost concepute pentru a fi ușor de citit. Scopul este de a putea identifica metodele de actualizare în dezvoltare, aruncând o privire rapidă în .routing fișiere. În exemplul următor, vor fi create trei rute:

  • [ PUT ] /utilizator
  • [ GET ] /utilizator
  • [ GET ] / user / reset-password

Vă întrebați de ce rutele sunt prefixate cu „utilizator”Deși nu este descris în definiția de rutare. Lumie folosește numele folderului în care fișierul de rutare trebuie să prefixeze rutele.

Aici suntem înăuntru controllers/user/user.routing.js . Dacă user folderul a fost într-un subfolder admin de exemplu, rutele ar fi fost prefixate de admin/user.

Rețineți că puteți trece un opțional path la definiția de rutare, așa că va fi folosit în locul celui implicit.

Acțiuni și Middlewares

După cum puteți vedea mai sus, fiecare configurație a rutelor are o metodă de acțiune care nu este altceva decât logica de executat atunci când apelăm ruta dvs. API. Vă recomand să păstrați într-un singur fișier: o metodă de acțiune și middleware-ul său asociat opțional.

Restricții

Pentru fiecare configurație a rutelor, veți alege nivelul de restricție asociat. Valoarea nivelului va fi transmisă funcției de restricție pe care o veți crea pentru ca Lumie să funcționeze. Vedea cum să inițializăm Lumie cu propria funcție de restricție.

Aceasta ar trebui să fie doar o funcție care returnează un middleware clasic express.

Concluzie

Folosesc această metodă de ceva timp. Îmi place să am un astfel de cadru de opinie de urmat atunci când mă dezvolt. La sfârșitul zilei, mă ajută să păstrez o bază de cod drăguță și să nu iau comenzi rapide precum scrierea unei logici prea mari într-un singur fișier sau definirea unei rute într-un fișier neadecvat.

Mulțumesc pentru lectură. Spune-mi în comentarii ce părere ai despre organizarea controlerelor în acest fel.

Dacă vi s-a părut util acest articol, renunțați la ceva? ?