Existe-t-il une convention commune pour la division et la modularisation du app.js
fichier dans une application Express.js ? Ou est-il courant de tout conserver dans un seul fichier?
javascript
node.js
modularity
express
Eric le Rouge
la source
la source
Réponses:
J'ai le mien brisé comme suit:
J'utilise Exportations pour renvoyer ce qui est pertinent. Par exemple, dans les modèles que je fais:
et puis si j'ai besoin de créer un numéro de téléphone, c'est aussi simple que:
si j'ai besoin d'utiliser le schéma, alors
PhoneNumber.schema
(ce qui suppose que nous travaillons à partir du dossier routes et que nous devons monter d'un niveau, puis descendre aux modèles)
MODIFIER 4
Le wiki express a une liste de frameworks construits dessus.
Parmi ceux-ci, je pense que le matador de Twitter est plutôt bien structuré. Nous avons en fait utilisé une approche très similaire pour charger certaines parties de l'application.
derby.js semble également extrêmement intéressant. Cela s'apparente à un météore sans tout le battage médiatique et donne en fait du crédit là où le crédit est dû (notamment, nœud et express).
MODIFIER 3
Si vous êtes fan de CoffeeScript (je ne le suis pas) et que vous voulez vraiment le L&F de Rails, il y a aussi Tower.js .
MODIFIER 2
Si vous êtes familier avec les rails et que cela ne vous dérange pas de perdre certains concepts, il y a Locomotive . C'est un cadre léger construit sur Express. Il a une structure très similaire à RoR et reprend certains des concepts les plus rudimentaires (tels que le routage).
Cela vaut la peine de vérifier même si vous ne prévoyez pas de l'utiliser.
MODIFIER 1
nodejs-express-mongoose-demo est très similaire à la façon dont j'ai le mien structuré. Vérifiez-le.
la source
Attention: le code de référencement que j'ai piraté ensemble pour le knock-out des nœuds, cela fonctionne en quelque sorte mais est loin d'être élégant ou poli.
Pour être plus précis sur le fractionnement,
app.js
j'ai le fichier app.js suivantCela signifie essentiellement que je place tout mon bootstrapping dans un fichier séparé, puis je bootstrap le serveur.
Alors, que fait le bootstrap ?
Eh bien, il divise toute la configuration d'initialisation du serveur en jolis morceaux. Plus précisément
app.configure
)Par exemple, regardons le fichier de routage
Ici, je charge tous mes modèles et routes sous forme de tableaux de fichiers.
Clause de non-responsabilité:
readdirSync
n'est correct que lorsqu'il est appelé avant de démarrer le serveur http (avant.listen
). L'appel d'appels de blocage synchrones au moment du démarrage du serveur rend simplement le code plus lisible (c'est essentiellement un hack)Ici, je frappe socket.io pour utiliser l'autorisation plutôt que de laisser n'importe quel tom et jack parler à mon serveur socket.io
Ici, je commence mes itinéraires en passant le modèle pertinent dans chaque objet d'itinéraire renvoyé par le fichier d'itinéraire.
Fondamentalement, le fait est que vous organisez tout dans de jolis petits modules et que vous disposez ensuite d'un mécanisme de démarrage.
Mon autre projet (mon blog) a un fichier init avec une structure similaire .
Avertissement: le blog est cassé et ne se construit pas, je travaille dessus.
la source
Pour une organisation de routage maintenable, vous pouvez consulter cet article sur le module de nœud express-routescan et l'essayer. C'est la meilleure solution pour moi.
la source
J'ai mes applications construites au-dessus de l'outil de générateur express. Vous pouvez l'installer en l'exécutant
npm install express-generator -g
et l'exécuter en utilisantexpress <APP_NAME>
.Pour vous donner une perspective, l'une des structures de ma plus petite application ressemblait à ceci:
Une chose que j'aime bien dans cette structure que je finis par adopter pour toute application express que je développe est la façon dont les itinéraires sont organisés. Je n'aimais pas avoir à exiger chaque fichier de route dans l'app.js et
app.use()
chaque route, d'autant plus que le fichier grossit . En tant que tel, j'ai trouvé utile de regrouper et de centraliser tous mesapp.use()
fichiers sur un fichier ./routes/index.js.En fin de compte, mon app.js ressemblera à ceci:
et mon ./routes/index.js ressemblera à ceci:
Je suis capable de le faire simplement
require(./users)
parce que j'ai écrit la route des utilisateurs en utilisant express.Router () qui me permet de "grouper" plusieurs routes et de les exporter en même temps, dans le but de rendre l'application plus modulaire.Voici un exemple de ce que vous feriez bien sur mon itinéraire ./routers/users.js:
J'espère que cela a aidé à répondre à votre question! Bonne chance!
la source