Skip to content

Instantly share code, notes, and snippets.

@ondrek
Last active October 22, 2019 15:33
Show Gist options
  • Save ondrek/7439474 to your computer and use it in GitHub Desktop.
Save ondrek/7439474 to your computer and use it in GitHub Desktop.
How structure big nodejs express application
---------------------------------------------------
Sample of Structure
/express.js
/views/javascript/jquery.js
/views/javascript/mootools.js
/views/stylesheets/resets.css
/views/stylesheets/globals.css
/views/index.html
/views/settings.html
/views/register.html
/views/login.html
/publics/login/_default.js(res, req)
/publics/register/_default.js(res, req)
/publics/docs/_default.js(res, req)
/publics/blog/_default.js(res, req)
/privates/settings/_default.js(res, req)
/privates/admin/_default.js(res, req)
/privates/useronly/_default.js(res, req)
/privates/secretscreen/_default.js(res, req)
---------------------------------------------------
How routing should work
Request workflow
user browse mywebsite.co/login/newuser/
req/res goes to express.js and its routed to _default.js
in _default.js based on POST/URL/GET/COOKIES logic is routed
in newuser.js is req/res
How Goes Req/Res:
express.js with (req, res) ->
publics/login/_default with (req, res) ->
publics/login/newuser.js with (req, res) ->
res.render(views/login/screen.html)
// ---------------------------------------------------
// express.js
var express = require('express');
var app = module.exports = express();
app.configure(function(){
// avoid fcking 404 request made by browsers
app.use(express.favicon());
// client routing
app.use('/s', express.static(__dirname+'/views/fonts'));
app.use('/s', express.static(__dirname+'/views/stylesheets'));
app.use('/s', express.static(__dirname+'/views/images'));
app.use('/s', express.static(__dirname+'/views/javascript'));
// defaults when use res.render('thistemplate.html')
app.set('views', __dirname + '/views');
app.engine('html', require('ejs').renderFile);
// parser, mandatory part
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
});
// public screens, without registration
app.all('/', function(req, res) {
res.render('publics/index.html');
});
var screens = [
'login', 'register', 'docs', 'blog', 'index'
].forEach(function(mod){
app.all('/' + mod + '/*', function(req, res) {
require('./publics/' + mod +'/_index')(req, res);
});
});
// private screens after authorization
var hasAuth = function(){
// isAuth ? next() : redirectToIndex()
}
app.all('/-/', hasAuth, function(req, res) {
require('./privates/dashboard/_index')(req, res);
});
var screens = [
'settings', 'admin', 'useronly', 'secretscreen'
].forEach(function(mod){
app.all('/-/' + mod + '/*', hasAuth, function(req, res) {
require('./privates/' + mod + '/_index')(req, res);
});
});
// run
if (!module.parent) {
app.use(express.logger('dev'));
app.listen(4090);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment