Node.js: Configuration et itinéraires dans un fichier différent

Je commence une nouvelle application Node.js et cette fois, j'essaie d'organiser correctement le code au lieu de tout avoir dans le même fichier.

Je n'ai qu'une configuration simple maintenant sur server.coffee :

 express = require 'express' app = module.exports = express.createServer() ## CONFIGURATION ## app.configure () -> app.set 'views', __dirname + '/views' app.set 'view engine', 'jade' app.use express.bodyParser() app.use express.logger('dev') app.use express.profiler() app.use express.methodOverride() app.use app.router app.use express.static(__dirname + '/public') app.configure 'development', () -> app.use express.errorHandler({dumpExceptions: true, showStack: true}) app.configure 'production', () -> app.use express.errorHandler() app.get '/', (req,res) -> res.render 'index' title: 'Express' ## SERVER ## port = process.env.PORT || 3000 app.listen port, () -> console.log "Listening on port" + port 

J'ai quelques questions concernant ce code simple et je sais que toutes les réponses dépendent du développeur mais je veux vraiment le faire correctement:

  • server.js fichier server.js aurait-il plus que app.listen ? Quelle devrait être exactement?
  • Toutes les configurations ne devraient-elles pas être dans un fichier différent des routes? Comment puis-je supprimer l' app.get dans un autre fichier et les faire fonctionner lorsque je lance le server.coffee ?
  • Qu'est-ce qui devrait contenir exactement l' index.coffee que je vois dans de nombreuses applications comme Hubot?

J'espère que quelqu'un peut me donner une réponse autre que «ça dépend».

Vous pouvez tirer parti de l' require et passer simplement l' app var en tant que paramètre à une méthode. Ce n'est pas la syntaxe la plus jolie, ni dans CoffeeScript, mais vous devriez avoir l'idée.

Routes.js

 module.exports = function (app) { // set up the routes themselves app.get("/", function (req, res) { // do stuff }); }; 

App.js

 require("./routes")(app); 

Si vous souhaitez aller plus loin, je séparer mes routes en petits groupes et dans son propre sous-dossier. (Comme: les routes/auth.js pour la connexion / déconnexion, les routes/main.js pour la maison / sur / contact et ainsi de suite)

Routes / index.js

 // export a function that accepts `app` as a param module.exports = function (app) { require("./main")(app); // add new lines for each other module, or use an array with a forEach }; 

( routes.js de avant comme routes/main.js , la source elle-même reste la même)

Express 4 simplifie cela avec la classe express.Router .

L'autre fonctionnalité pour aider à organiser les itinéraires est une nouvelle classe, express.Router , que vous pouvez utiliser pour créer des gestionnaires d'itinéraires modulaires modulables. Une instance de Router est un système de middleware et de routage complet; Pour cette raison, il est souvent appelé une «mini-application».

L'exemple suivant crée un routeur en tant que module, charge un middleware, définit certains itinéraires et le monte sur un chemin sur l'application principale.

Créez un fichier de routeur nommé birds.js dans le répertoire de l'application, avec le contenu suivant:

 var express = require('express'); var router = express.Router(); // middleware specific to this router router.use(function timeLog(req, res, next) { console.log('Time: ', Date.now()); next(); }); // define the home page route router.get('/', function(req, res) { res.send('Birds home page'); }); // define the about route router.get('/about', function(req, res) { res.send('About birds'); }); module.exports = router; 

Ensuite, chargez le module de routeur dans l'application:

 var birds = require('./birds'); app.use('/birds', birds); 

L'application pourra désormais gérer les demandes aux /birds et /birds/about , en même temps que l'appel du middleware timeLog spécifique à l'itinéraire.

Il y a 2 questions similaires qui peuvent vous aider beaucoup avec ceci:

Comment structurer une application express.js?

Structure de l'application Nodejs / Expressjs