Wpis z mikrobloga

[ #nodejs #javascript #expressjs #naukaprogramowania ] - Controller a router.

Weźmy dla przykładu logowanie, żeby zobrazować o czym mówię.

Struktura folderów wygląda załóżmy tak:

--...
--routes
----index.js
--controllers(?)*
----loginCtrl.js(?)*
--...

No i jak to z tymi kontrolerami jest? Router ma pełnić rolę controllera? Tj. cała logika ma być w index.js? Nie bierzmy dla uproszczenie passport authenticate, bo jak się domyślam to powinno być w osobnym pliku/folderze 'authenticate' - jeśli się mylę to mnie poprawcie. No i wracając, czy logikę mam mieć napisaną w osobnym pliku - tutaj niech to będzie loginCtrl i później tylko w routerze wywoływać przy:

.post('/'...) {
login();
}

Już sam nie wiem, jak przeglądam projekty na gh to w niektórych wszystko jest w routerach, w innych znowu są controllery i trochę się pogubiłem. Czy to po prostu zależy od projektu i mam pisać tak jak mi jest wygodniej? Jest jakiś styleguide, który to jakoś opisuje? Te które do tej pory znalazłem opisują zasady odnośnie formatowania, nazewnictwa itp., nie było w nich nic odnośnie struktury projektu, więc stąd to moje pytanie.

Z góry dziękuję za pomoc. :)
  • 4
@PrawyKuba: Zerknij jak to rozwiązano w meanjs. Ja logikę robię w kontrolerach, które są wywoływane przez routery. Schemat wygląda tak: zapytanie -> router -> kontroler (tu pobranie danych z modelu, jakieś operacje na danych) -> generowanie widoku -> do użytkownika. Do tego w router możesz wrzucić kilka middlewarów występujących po sobie, w nich dokonujesz walidacji, autoryzacji itp, potem to trafia do kontrolera. Zaznaczam, że nie jestem jakimś mega znawcą, nie
@PrawyKuba: kwestia zależna jedynie od Ciebie. Ogólnie rzecz biorąc powinieneś dążyć do tego, żeby rozbijać swoją logikę na małe, samowystarczalne moduły, łatwe do testowania i dostosowane do komponowania z nich większej funkcjonalności.

Kwestia tego czy będziesz to robić w routerze czy kontrolerze jest mniej ważna. Faktem jest, że w np. w świecie PHP i w JS stackach które potem kopiowały podejście z innych środowisk, nabudowano w okół dużo abstrakcji: masz routing,