diff 1__Development/6__Website/POPExpressServer/POPServer.js @ 5:e73fbbcb5fd2

Persisting basic graph works, starting to add persist of view hierarchy too
author Sean Halle <seanhalle@yahoo.com>
date Sun, 03 Aug 2014 23:38:15 -0700
parents
children
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/1__Development/6__Website/POPExpressServer/POPServer.js	Sun Aug 03 23:38:15 2014 -0700
     1.3 @@ -0,0 +1,72 @@
     1.4 +var express = require('express');
     1.5 +var http = require('http');
     1.6 +var path = require('path');
     1.7 +var favicon = require('static-favicon');
     1.8 +var logger = require('morgan');
     1.9 +var cookieParser = require('cookie-parser');
    1.10 +var bodyParser = require('body-parser');
    1.11 +
    1.12 +//The express package returned a raw function to the express variable,
    1.13 +// so it can be invoked directly, which runs the express code:
    1.14 +var server = express();
    1.15 +
    1.16 +// view engine setup -- inside the handlers, the "render" function takes
    1.17 +// the name of one of the views set up here:
    1.18 +server.set('views', path.join(__dirname, 'views'));
    1.19 +server.set('view engine', 'jade');
    1.20 +
    1.21 +server.use(favicon());
    1.22 +server.use(logger('dev'));
    1.23 +server.use(bodyParser.json());
    1.24 +server.use(bodyParser.urlencoded());
    1.25 +server.use(cookieParser());
    1.26 +server.use(express.static(path.join(__dirname, 'public')));
    1.27 +server.use(server.router);
    1.28 +
    1.29 +//Load in functions that will be used to handle particular URLs
    1.30 +//In routeFns.js, have "exports.<fn_name>", and after the require,
    1.31 +// that fn is accessed as "routes.<fn_name>"
    1.32 +var routes = require('./routes/routeHdlrs'); 
    1.33 +var users = require('./routes/user');
    1.34 +
    1.35 +//Here is where URLs are associated to the handler functions (loaded above)
    1.36 +server.get('/', routes.index); //associates base URL to routes.index fn
    1.37 +server.get('/users', users.list);
    1.38 +server.get('/foobar', routes.foobar);
    1.39 +server.get('/savejson', routes.saveJSON);
    1.40 +
    1.41 +/// catch 404 and forwarding to error handler
    1.42 +server.use(function(req, res, next) {
    1.43 +    var err = new Error('Not Found');
    1.44 +    err.status = 404;
    1.45 +    next(err);
    1.46 +});
    1.47 +
    1.48 +/// error handlers
    1.49 +
    1.50 +// development error handler
    1.51 +// will print stacktrace
    1.52 +if (server.get('env') === 'development') {
    1.53 +    server.use(function(err, req, res, next) {
    1.54 +        res.render('error', {
    1.55 +            message: err.message,
    1.56 +            error: err
    1.57 +        });
    1.58 +    });
    1.59 +}
    1.60 +
    1.61 +// production error handler
    1.62 +// no stacktraces leaked to user
    1.63 +server.use(function(err, req, res, next) {
    1.64 +    res.render('error', {
    1.65 +        message: err.message,
    1.66 +        error: {}
    1.67 +    });
    1.68 +});
    1.69 +
    1.70 +
    1.71 +//in case this code is imported into a higher level project:
    1.72 +module.exports = server;
    1.73 +
    1.74 +//start the server listening and handling requests:
    1.75 +server.listen(3000, function(){console.log("server listening on port 3000");});