Skip to content

Commit 8f447d4

Browse files
starting work on refactoring routing into mvc-like
1 parent e15a14e commit 8f447d4

19 files changed

Lines changed: 280 additions & 110 deletions

‎server/app.js‎

Lines changed: 45 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -1,120 +1,64 @@
1-
path = require('path');
2-
3-
var express = require('express');
4-
var favicon = require('serve-favicon');
5-
var logger = require('morgan');
6-
var config = require(path.join(__dirname, '..', 'config'))
7-
8-
// Set baseURL depending on enviornment
9-
10-
var env = config.server.environment;
11-
if (env === 'production') {
12-
baseURL = "https://www.javascript.com/";
13-
}else if(env === 'staging'){
14-
baseURL = "http://javascript.preschool.io/";
15-
}else{
16-
baseURL = "http://localhost:3000/";
1+
path = require('path');
2+
config = require(path.join(__dirname, '..', 'config'));
3+
4+
// TODO Is there a better way we can do this?
5+
if (config.server.environment === 'production') {
6+
baseURL = 'https://www.javascript.com/';
7+
} else if (config.server.environment === 'staging') {
8+
baseURL = 'http://javascript.preschool.io/';
9+
} else {
10+
baseURL = 'http://localhost:3000/';
1711
}
1812

19-
var routes = require(path.join(__dirname, 'routes','index'));
13+
var express = require('express'),
14+
logger = require('morgan'),
15+
session = require('express-session'),
16+
passport = require('passport'),
17+
expressSession = require('express-session'),
18+
redis = require('redis'),
19+
redisStore = require('connect-redis')(expressSession),
20+
methodOverride = require('methodOverride'),
21+
bodyParser = require('bodyParser');
2022

21-
var about = require(path.join(__dirname, 'routes', 'about'));
22-
var admin = require(path.join(__dirname, 'routes', 'admin'));
23-
var assets = require(path.join(__dirname, 'routes', 'assets'));
24-
var courses = require(path.join(__dirname, 'routes', 'courses'));
25-
var feed = require(path.join(__dirname, 'routes', 'feed'));
26-
var feedback = require(path.join(__dirname, 'routes', 'feedback'));
27-
var guidelines = require(path.join(__dirname, 'routes', 'guidelines'));
28-
var learn = require(path.join(__dirname, 'routes', 'learn'));
29-
var news = require(path.join(__dirname, 'routes', 'news'));
30-
var notFound = require(path.join(__dirname, 'routes', 'notFound'));
31-
var resources = require(path.join(__dirname, 'routes', 'resources'));
32-
var styleguide = require(path.join(__dirname, 'routes', 'styleguide'));
33-
var users = require(path.join(__dirname, 'routes', 'users'));
23+
var app = module.exports = express();
3424

35-
var app = express();
36-
app.set('trust proxy', 1);
25+
app.set('trust proxy', true);
26+
app.set('view engine', 'jade');
27+
app.set('views', path.join(__dirname, 'views'));
28+
29+
app.use(logger('dev'));
30+
app.use(express.static(path.join(__dirname, 'public')));
31+
app.use(bodyParser.urlencoded({ extended: true }));
32+
app.use(methodOverride('_method'));
33+
app.use(require('flash')());
3734

38-
// Must come before calls to app.use
39-
var passport = require('passport');
40-
var expressSession = require('express-session');
41-
var RedisStore = require('connect-redis')(expressSession);
42-
var redis = require('redis');
43-
var redisHost = config.server.redis;
44-
var client = redis.createClient(6379, redisHost, {});
45-
// Don't set cookies to secure in dev.
46-
var secureCookie = config.server.environment === 'production' ? true : false
4735
app.use(expressSession({
48-
store: new RedisStore({client: client}),
36+
store: new redisStore({
37+
client: redis.createClient(6379, config.server.redis, {})
38+
}),
4939
secret: config.server.cookieKey
5040
}));
41+
5142
app.use(passport.initialize());
5243
app.use(passport.session());
5344

54-
// view engine setup
55-
app.set('views', path.join(__dirname, 'views'));
56-
app.set('view engine', 'jade');
57-
58-
// uncomment after placing your favicon in /public
59-
//app.use(favicon(__dirname + '/public/favicon.ico'));
60-
app.use(logger('dev'));
61-
app.use(express.static(path.join(__dirname, '..', 'public')));
62-
63-
// Flash messages
64-
app.use(require('flash')());
65-
66-
// routes
67-
app.use('/', routes);
68-
app.use('/about', about);
69-
app.use('/admin', admin);
70-
app.use('/assets', assets);
71-
app.use('/courses', courses)
72-
app.use('/courses.json', courses);
73-
app.use('/feed', feed);
74-
app.use('/feedback', feedback);
75-
app.use('/guidelines', guidelines)
76-
app.use('/news', news);
77-
app.use('/resources', resources)
78-
app.use('/styleguide', styleguide);
79-
app.use('/try', learn)
80-
app.use('/users', users);
45+
require('./lib/boot')(app, {
46+
verbose: config.server.environment === 'development'
47+
});
8148

82-
// catch 404 and forward to error handler
83-
app.use(function(req, res, next) {
84-
var err = new Error('Not Found');
85-
err.status = 404;
86-
next(err);
49+
app.use(function(err, res, next) {
50+
res.status(400).render('404', { url: req.originalUrl });
8751
});
8852

89-
// error handlers
53+
if (config.server.environment === 'development') {
54+
app.use(function(err, req, res, next) {
55+
res.status(err.status || 500);
9056

91-
// development error handler
92-
// will print stacktrace
93-
if (app.get('env') === 'development') {
94-
app.use(function(err, req, res, next) {
95-
res.status(err.status || 500);
96-
res.render('error', {
97-
message: err.message,
98-
error: err
99-
});
57+
res.render('error', {
58+
message: err.message,
59+
error: err
10060
});
61+
});
10162
}
10263

103-
// production error handler
104-
// no stacktraces leaked to user
105-
app.use(function(err, req, res, next) {
106-
res.status(err.status || 500);
107-
if (err.status === 404) {
108-
res.render('404');
109-
}else{
110-
res.render('error', {
111-
message: err.message,
112-
error: {}
113-
});
114-
}
115-
});
116-
11764
module.exports = app;
118-
119-
// Set absolute paths for partials
120-
app.locals.basedir = path.join(__dirname, '');

‎server/controllers/about.js‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
exports.routes = {
2+
'index': function(req, res, next) {
3+
res.render('index');
4+
}
5+
};

‎server/controllers/example.js‎

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/**
2+
* If a prefix is provided, the value will be prepended to the routes defined.
3+
*
4+
* It is optional to override the controller name if prefix is being used, so
5+
* with the example given it would create routes like this:
6+
*
7+
* /users/:user_id/pets
8+
* /users/:user_id/pets/:pets_id
9+
**/
10+
exports.prefix = '/users/:user_id';
11+
12+
/**
13+
* name is an optional argument that you'll usually only modify if you've
14+
* added a prefix to the controller. name is generally assumed based off the
15+
* file name, but if you've named the file something like user-pets then you'd
16+
* get whacky routes like /users/:user_id/user-pets and that would be weird.
17+
**/
18+
exports.name = 'pets';
19+
20+
/**
21+
* Dictates what kind of route set we're defining. Two valid values are:
22+
*
23+
* resource, resources
24+
*
25+
* If it is a resources it will check for member routes.
26+
**/
27+
exports.type = 'resources';
28+
29+
// Code to execute before a request.
30+
exports.before = function(req, res, next) {
31+
}
32+
33+
exports.routes = {
34+
// /users/:user_id/pets
35+
index: function(req, res, next) { // GET
36+
},
37+
38+
// /users/:user_id/pets/:pets_id
39+
// /users/:user_id/pets
40+
show: function(req, res, next) { // GET
41+
},
42+
43+
// /users/:user_id/pets/new
44+
new: function(req, res, next) { // GET
45+
},
46+
47+
// /users/:user_id/pets
48+
create: function(req, res, next) { // POST
49+
},
50+
51+
// /users/:user_id/pets/:pets_id/edit
52+
// /users/:user_id/pets/edit
53+
edit: function(req, res, next) { // GET
54+
},
55+
56+
// /users/:user_id/pets/:pets_id
57+
// /users/:user_id/pets
58+
update: function(req, res, next) { // PUT
59+
},
60+
61+
// /users/:user_id/pets/:pets_id
62+
// /users/:user_id/pets
63+
destroy: function(req, res, next) { // DELETE
64+
},
65+
66+
members: { // GET
67+
// /users/:user_id/pets/:pet_id/name
68+
name: function(req, res, next) {
69+
}
70+
},
71+
72+
collection: { // GET
73+
// /users/:user_id/pets/search
74+
search: function(req, res, next) {
75+
}
76+
}
77+
}

0 commit comments

Comments
 (0)