Как да организираме Express контролери за големи кодови бази

Преди три години започнах да разработвам Express.js API за компания. Чудех се коя би могла да бъде най-добрата архитектура на контролерите, за да останем организирани, докато кодовата база расте.

Повлиян от Sails или Rails и от моите изследвания, дойдох да създам своя собствена система. Не исках да претоварвам проекта си, използвайки пълна рамка като Sails, а по-скоро да избера по-леки зависимости, когато е необходимо.

Така че създадох организационна система за контролерите на приложението, която сдвоих с домашен товарач . Оттогава подобрих и двамата благодарение на натрупания опит, като го внедрих в други проекти.

Днес съм достатъчно уверен в този метод, за да го споделя, тъй като резултатите са убедителни.

От това, което знам, се използва от няколко големи компании. Това опростява включването на нови разработчици, тъй като прави кодовата база по-лесна за четене.

✅ Ето как да настроите чиста архитектура на контролерите.

Структурата

Ако не очаквате растежа на приложението си, бързо ще имате неорганизирана кодова база. Проектирах метода на организацията, за да има широка съвместимост, което означава, че някой ден няма да бъдете заключени в един вид случай на употреба, който не можете да разрешите с този метод.

Настройте вашето файлово дърво

  • Групиране на маршрути в контролери
  • Създайте папки за всеки контролер
  • Създайте файл за маршрутизация във всеки контролер, който описва пътя на всеки маршрут, метода за извикване, свързания с него по избор междинен софтуер и нивото на ограничение.
  • Създайте файл за действията на всеки контролер, който съдържа метода за изпълнение и междинните програми .
  • Създайте спецификационен файл за тестване

Да видим как изглежда.

Не се страхувайте да създадете много файлове . Това не забавя развитието и прави вашата кодова база чиста и ефирна. ✨

Заредете маршрутите си

За да накараме нещата да работят в съответствие със структурата, дефинирана по-горе, трябва да използваме прост товарач, който създадох: Lumie. Той ще премине през вашите контролери, ще прочете дефиниционните файлове и ще зареди вашите маршрути.

Това е малък пакет, можете да проверите източника на код на GitHub.

Маршрутизиране на файлове

Те са проектирани да бъдат лесни за четене. Целта е да можете да идентифицирате методи за актуализиране в разработка, като направите бърз поглед във вашите .routing файлове. В следния пример ще бъдат създадени три маршрута:

  • [PUT] / потребител
  • [GET] / потребител
  • [GET] / потребител / нулиране на парола

Чудите се защо маршрутите са с префикс „ потребител “, въпреки че това не е описано в дефиницията на маршрута. Lumie използва името на папката, в която маршрутизиращият файл е за префикс на маршрути.

Ето, ние сме вътре controllers/user/user.routing.js. Ако userпапката е била в подпапка adminнапример, маршрутите биха имали префикс от admin/user.

Обърнете внимание, че можете да предадете незадължително pathполе на дефиницията на маршрута, така че то да се използва вместо стандартното.

Действия и Middlewares

Както можете да видите по-горе, всяка конфигурация на маршрути има метод за действие, който не е нищо повече от логиката, която трябва да се изпълни, когато извикаме вашия API маршрут. Препоръчвам да съхранявате в един файл: един метод за действие и свързания с него незадължителен междинен софтуер .

Ограничения

За всяка конфигурация на маршрути ще изберете свързаното ниво на ограничение. Стойността на нивото ще бъде предадена на функцията за ограничение, която ще създадете, за да накара Lumie да работи. Вижте как да инициализирате Lumie със собствената си функция за ограничаване.

Това трябва да е само функция, която връща класически експресен мидълуер.

Заключение

Използвам този метод от известно време. Харесва ми да имам този вид мнителна рамка, която да следвам, когато се развивам. В края на деня това ми помага да поддържам хубава кодова база и да не използвам преки пътища като писане на твърде много логика в един файл или определяне на маршрут в неподходящ файл.

Благодаря за четенето. Кажете ми в коментарите какво мислите за организирането на контролери по този начин.

Ако намерите тази статия за полезна, оставете малко? ?