2011-12-08 16 views
21

decir que tengo el código para separar rutas en expressjs:nodejs/Expressjs estructura aplicación

module.exports = function(express,app,client) { 

    app.get('/', function(req,res,next) { 
     var query = 'SELECT * FROM users LIMIT 10'; 
     var user = client.query(query, function (err, results, fields) { 
      res.render('index', { 
       title: 'test', 
       users: results 
      }); 
      client.end(); 
     }); 
    }); 
} 

y lo requiera en app.js:

require('./controllers/routes.js')(express,app,client); 

1) ¿Cómo puedo separar consultas db en nuevos archivos ¿de la mejor manera?

Este archivo sería bastante grande incluso si separa la lógica db.

2) ¿Cuál es una buena manera de separar las rutas? Tal vez módulos separados? y luego requerirlos a todos en app.js?

Respuesta

32

Hay una pregunta similar aquí que debería leer: How to structure a express.js application?

1) Toda la lógica de consulta debe ser puesto en modelos (módulos que residen en/modelos, por ejemplo)

2) por separado todos sus rutas (controladores) en los módulos (y ponerlos en/rutas para ex) por rutas quiero decir por ejemplo: - toda la lógica de "usuarios" rutas entran en /routes/users.js

Trate de mantenerlo aplicación como MVC-ish como sea posible.

pequeño ejemplo para su aplicación anterior:

app.js

// configuration for express etc 
require('./routes/index')(app) 

rutas/index.js

var model = require("../models/users.js"); 

module.exports = function (app) { 

    app.get('/', function (req, res, next) { 
    model.get_recent(function (err, results) { 
     // do stuff with your results 
     res.render('index'); 
    }); 
    }); 

} 

modelos/users.js

module.exports = { 
    get_recent: function(callback) { 
    var query = "SELECT * FROM users LIMIT 10"; 
    database.query(query, callback); 
    } 
} 
+0

Ok. Sí, trato de seguir el patrón de mvc, pero me cuesta pensar en cómo hacerlo con expressjs. Entonces, ¿puedo hacerlo de la manera en que lo estoy haciendo ahora? ¿Y requiere todas las rutas en app.js? Y los modelos, ¿cómo los separé en el ejemplo anterior? ¿Podría mostrar un pequeño ejemplo dado el código que proporcioné? Sería muy apreciado. – georgesamper

+0

actualicé mi publicación – alessioalex

+0

Bueno, eso tiene mucho sentido ahora, muchas gracias por aclarar eso :) – georgesamper

5

En el paquete de descarga expressjs, hay una carpeta llamada "mvc". El autor proporciona un buen ejemplo para una pequeña estructura de mvc &. Al revisar el código, obtendrá mucha inspiración.

+2

Esto se puede encontrar en el repositorio [** 'visionmedia/express' **] (https://github.com/ visionmedia/express) en el directorio [** 'express/examples/mvc' **] (https://github.com/visionmedia/express/tree/master/examples/mvc) para aquellos que estén tan interesados ​​en esto como Yo era. –

1

¿Qué tal express-train? Lo he estado usando últimamente, y funciona bien con estructuras de aplicaciones complejas.

Cuestiones relacionadas