| rev |
line source |
|
seanhalle@5
|
1 var express = require('express');
|
|
seanhalle@5
|
2 var http = require('http');
|
|
seanhalle@5
|
3 var path = require('path');
|
|
seanhalle@5
|
4 var favicon = require('static-favicon');
|
|
seanhalle@5
|
5 var logger = require('morgan');
|
|
seanhalle@5
|
6 var cookieParser = require('cookie-parser');
|
|
seanhalle@5
|
7 var bodyParser = require('body-parser');
|
|
seanhalle@5
|
8
|
|
seanhalle@5
|
9 //The express package returned a raw function to the express variable,
|
|
seanhalle@5
|
10 // so it can be invoked directly, which runs the express code:
|
|
seanhalle@5
|
11 var server = express();
|
|
seanhalle@5
|
12
|
|
seanhalle@5
|
13 // view engine setup -- inside the handlers, the "render" function takes
|
|
seanhalle@5
|
14 // the name of one of the views set up here:
|
|
seanhalle@5
|
15 server.set('views', path.join(__dirname, 'views'));
|
|
seanhalle@5
|
16 server.set('view engine', 'jade');
|
|
seanhalle@5
|
17
|
|
seanhalle@5
|
18 server.use(favicon());
|
|
seanhalle@5
|
19 server.use(logger('dev'));
|
|
seanhalle@5
|
20 server.use(bodyParser.json());
|
|
seanhalle@5
|
21 server.use(bodyParser.urlencoded());
|
|
seanhalle@5
|
22 server.use(cookieParser());
|
|
seanhalle@5
|
23 server.use(express.static(path.join(__dirname, 'public')));
|
|
seanhalle@5
|
24 server.use(server.router);
|
|
seanhalle@5
|
25
|
|
seanhalle@5
|
26 //Load in functions that will be used to handle particular URLs
|
|
seanhalle@5
|
27 //In routeFns.js, have "exports.<fn_name>", and after the require,
|
|
seanhalle@5
|
28 // that fn is accessed as "routes.<fn_name>"
|
|
seanhalle@5
|
29 var routes = require('./routes/routeHdlrs');
|
|
seanhalle@5
|
30 var users = require('./routes/user');
|
|
seanhalle@5
|
31
|
|
seanhalle@5
|
32 //Here is where URLs are associated to the handler functions (loaded above)
|
|
seanhalle@5
|
33 server.get('/', routes.index); //associates base URL to routes.index fn
|
|
seanhalle@5
|
34 server.get('/users', users.list);
|
|
seanhalle@5
|
35 server.get('/foobar', routes.foobar);
|
|
seanhalle@5
|
36 server.get('/savejson', routes.saveJSON);
|
|
seanhalle@5
|
37
|
|
seanhalle@5
|
38 /// catch 404 and forwarding to error handler
|
|
seanhalle@5
|
39 server.use(function(req, res, next) {
|
|
seanhalle@5
|
40 var err = new Error('Not Found');
|
|
seanhalle@5
|
41 err.status = 404;
|
|
seanhalle@5
|
42 next(err);
|
|
seanhalle@5
|
43 });
|
|
seanhalle@5
|
44
|
|
seanhalle@5
|
45 /// error handlers
|
|
seanhalle@5
|
46
|
|
seanhalle@5
|
47 // development error handler
|
|
seanhalle@5
|
48 // will print stacktrace
|
|
seanhalle@5
|
49 if (server.get('env') === 'development') {
|
|
seanhalle@5
|
50 server.use(function(err, req, res, next) {
|
|
seanhalle@5
|
51 res.render('error', {
|
|
seanhalle@5
|
52 message: err.message,
|
|
seanhalle@5
|
53 error: err
|
|
seanhalle@5
|
54 });
|
|
seanhalle@5
|
55 });
|
|
seanhalle@5
|
56 }
|
|
seanhalle@5
|
57
|
|
seanhalle@5
|
58 // production error handler
|
|
seanhalle@5
|
59 // no stacktraces leaked to user
|
|
seanhalle@5
|
60 server.use(function(err, req, res, next) {
|
|
seanhalle@5
|
61 res.render('error', {
|
|
seanhalle@5
|
62 message: err.message,
|
|
seanhalle@5
|
63 error: {}
|
|
seanhalle@5
|
64 });
|
|
seanhalle@5
|
65 });
|
|
seanhalle@5
|
66
|
|
seanhalle@5
|
67
|
|
seanhalle@5
|
68 //in case this code is imported into a higher level project:
|
|
seanhalle@5
|
69 module.exports = server;
|
|
seanhalle@5
|
70
|
|
seanhalle@5
|
71 //start the server listening and handling requests:
|
|
seanhalle@5
|
72 server.listen(3000, function(){console.log("server listening on port 3000");});
|