annotate 1__Development/6__Website/POPExpressServer/POPServer.js @ 7:20a1407463a0

sort of working with view sets -- does restore, (not tested) have to chg Display to handle view sets
author Sean Halle <seanhalle@yahoo.com>
date Thu, 07 Aug 2014 00:10:50 -0700
parents
children
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");});