Czy istnieje wspólna konwencja podziału i modularyzacji app.js
pliku w aplikacji Express.js ? A może często trzyma się wszystko w jednym pliku?
javascript
node.js
modularity
express
Eric the Red
źródło
źródło
Odpowiedzi:
Mój rozpadł się w następujący sposób:
Korzystam z eksportu, aby zwrócić to, co jest istotne. Na przykład w modelach, które wykonuję:
a jeśli muszę utworzyć numer telefonu, jest to tak proste, jak:
jeśli muszę użyć schematu, to
PhoneNumber.schema
(co zakłada, że pracujemy z folderu tras i musimy przejść 1 poziom w górę, a następnie w dół do modeli)
EDYCJA 4
Express wiki ma listę struktur zbudowanych na wierzchu.
Spośród nich myślę, że matador na Twitterze ma całkiem dobrą strukturę. W rzeczywistości zastosowaliśmy bardzo podobne podejście do sposobu ładowania części aplikacji.
derby.js również wygląda niezwykle interesująco. Jest to podobne do meteor bez całego szumu i faktycznie przypisuje kredyt tam, gdzie należy się kredyt (zwłaszcza węzeł i ekspres).
EDYCJA 3
Jeśli jesteś fanem CoffeeScript (ja nie jestem) i naprawdę chcesz L&F Railsów, jest też Tower.js .
EDYCJA 2
Jeśli jesteś zaznajomiony z Railsami i nie przeszkadza ci wykrwawianie niektórych koncepcji, to jest Lokomotywa . Jest to lekki framework oparty na Express. Ma bardzo podobną strukturę jak RoR i przenosi niektóre z bardziej podstawowych pojęć (takich jak routing).
Warto to sprawdzić, nawet jeśli nie planujesz z niego korzystać.
EDYCJA 1
nodejs-express-mongoose-demo jest bardzo podobne do mojej struktury. Sprawdź to.
źródło
Ostrzeżenie: odnośnik do kodu, który zhakowałem razem w celu usunięcia węzłów, trochę działa, ale nie jest elegancki ani dopracowany.
Aby być bardziej szczegółowym na temat podziału,
app.js
mam następujący plik app.jsZasadniczo oznacza to, że umieszczam cały proces ładowania początkowego w osobnym pliku, a następnie uruchamiam serwer.
Więc co robi bootstrap ?
Cóż, dzieli całą konfigurację inicjalizacji serwera na ładne fragmenty. konkretnie
app.configure
)Spójrzmy na przykład na plik routingu
Tutaj ładuję wszystkie moje modele i trasy jako tablice plików.
Zastrzeżenie:
readdirSync
jest ok tylko wtedy, gdy zostanie wywołane przed uruchomieniem serwera http (wcześniej.listen
). Wywołanie synchronicznych wywołań blokujących w czasie uruchamiania serwera sprawia, że kod jest bardziej czytelny (jest to w zasadzie hack)Tutaj uderzam socket.io, aby faktycznie używał autoryzacji, a nie pozwalając jakiemukolwiek tomowi i jackowi rozmawiać z moim serwerem socket.io
Tutaj rozpoczynam moje trasy od przekazania odpowiedniego modelu do każdego obiektu trasy zwróconego z pliku trasy.
Zasadniczo chodzi o to, że organizujesz wszystko w ładne małe moduły, a następnie masz pewien mechanizm ładowania początkowego.
Mój inny projekt (mój blog) ma plik init o podobnej strukturze .
Zastrzeżenie: blog jest zepsuty i nie tworzy się, pracuję nad tym.
źródło
Dla zarządzalny organizacji routingu można sprawdzić ten artykuł o tej wyraźnej-routescan modułu węzła i spróbować. To dla mnie najlepsze rozwiązanie.
źródło
Moje aplikacje są tworzone w oparciu o narzędzie ekspresowego generatora. Możesz go zainstalować, uruchamiając
npm install express-generator -g
i uruchamiając za pomocąexpress <APP_NAME>
.Aby dać ci perspektywę, jedna ze struktur mojej mniejszej aplikacji wyglądała następująco:
Jedną fajną rzeczą, którą lubię w tej strukturze, którą ostatecznie dostosowuję do każdej rozwijanej przeze mnie aplikacji ekspresowej, jest sposób organizacji tras. Nie podobało mi się, że muszę wymagać plików tras w pliku app.js i
app.use()
każdej trasy, zwłaszcza gdy plik się powiększa. W związku z tym uznałem za pomocne zgrupowanie i scentralizowanie wszystkich moichapp.use()
plików w pliku ./routes/index.js.Ostatecznie mój plik app.js będzie wyglądał mniej więcej tak:
a mój ./routes/index.js będzie wyglądał mniej więcej tak:
Jestem w stanie to zrobić po prostu
require(./users)
dlatego, że napisałem trasy użytkowników przy użyciu express.Router (), który pozwala mi „grupować” wiele tras, a następnie eksportować je jednocześnie, w celu uczynienia aplikacji bardziej modułową.To jest przykład tego, co możesz dobrze na mojej trasie ./routers/users.js:
Mamy nadzieję, że pomogło to odpowiedzieć na Twoje pytanie! Powodzenia!
źródło