Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nodejs/Expressjs app structure

Tags:

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?

like image 662
georgesamper Avatar asked Dec 08 '11 08:12

georgesamper


People also ask

What is the structure of Node JS?

Node. js uses the “Single Threaded Event Loop” architecture to handle multiple concurrent clients. Node. js Processing Model is based on the JavaScript event-based model along with the JavaScript callback mechanism.

Is ExpressJS outdated?

Express has not been updated for years, and its next version has been in alpha for 6 years. People may think it is not updated because the API is stable and does not need change. The reality is: Express does not know how to handle async/await .

Is Express good for large projects?

Middleware frameworks, like Express. js, are suitable for small and medium projects. If you are going to develop a large project that will be supported by a large team of developers, Express. js is not the best choice.


1 Answers

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);   } } 
like image 152
alessioalex Avatar answered Nov 03 '22 02:11

alessioalex