Reputation: 5169
Say i have this code to separate routes in expressjs:
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();
});
});
}
And require it in app.js
:
require('./controllers/routes.js')(express,app,client);
1) How do i separate db queries into new files in the best way?
This file would get pretty big even if i separate db logic.
2) What is a good way to separate routes? Maybe separate modules? and then require them all in app.js
?
Upvotes: 22
Views: 18956
Reputation: 63663
There is a similar question here which you should read: How to structure a express.js application?
1) All your query logic should be put in models (modules that reside in /models for example)
2) Separate all your routes (controllers) into modules (and put them in /routes for ex) By routes I mean for example: - all the logic for "Users" routes go into /routes/users.js
Try to keep you app as MVC-ish as possible.
Small example for your app above:
app.js
// configuration for express etc
require('./routes/index')(app)
routes/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');
});
});
}
models/users.js
module.exports = {
get_recent: function(callback) {
var query = "SELECT * FROM users LIMIT 10";
database.query(query, callback);
}
}
Upvotes: 33
Reputation: 1475
How about express-train ? i have been using it lately, and it plays well with complex app structures.
Upvotes: 1
Reputation: 91
In the expressjs download package, there is a folder called "mvc". The author provides a good example for a tiny&efficient mvc structure. Going through the code, you will get much inspiration.
Upvotes: 5