seanhalle@5: var express = require('express'); seanhalle@5: var http = require('http'); seanhalle@5: var path = require('path'); seanhalle@5: var favicon = require('static-favicon'); seanhalle@5: var logger = require('morgan'); seanhalle@5: var cookieParser = require('cookie-parser'); seanhalle@5: var bodyParser = require('body-parser'); seanhalle@5: seanhalle@5: //The express package returned a raw function to the express variable, seanhalle@5: // so it can be invoked directly, which runs the express code: seanhalle@5: var server = express(); seanhalle@5: seanhalle@5: // view engine setup -- inside the handlers, the "render" function takes seanhalle@5: // the name of one of the views set up here: seanhalle@5: server.set('views', path.join(__dirname, 'views')); seanhalle@5: server.set('view engine', 'jade'); seanhalle@5: seanhalle@5: server.use(favicon()); seanhalle@5: server.use(logger('dev')); seanhalle@5: server.use(bodyParser.json()); seanhalle@5: server.use(bodyParser.urlencoded()); seanhalle@5: server.use(cookieParser()); seanhalle@5: server.use(express.static(path.join(__dirname, 'public'))); seanhalle@5: server.use(server.router); seanhalle@5: seanhalle@5: //Load in functions that will be used to handle particular URLs seanhalle@5: //In routeFns.js, have "exports.", and after the require, seanhalle@5: // that fn is accessed as "routes." seanhalle@5: var routes = require('./routes/routeHdlrs'); seanhalle@5: var users = require('./routes/user'); seanhalle@5: seanhalle@5: //Here is where URLs are associated to the handler functions (loaded above) seanhalle@5: server.get('/', routes.index); //associates base URL to routes.index fn seanhalle@5: server.get('/users', users.list); seanhalle@5: server.get('/foobar', routes.foobar); seanhalle@5: server.get('/savejson', routes.saveJSON); seanhalle@5: seanhalle@5: /// catch 404 and forwarding to error handler seanhalle@5: server.use(function(req, res, next) { seanhalle@5: var err = new Error('Not Found'); seanhalle@5: err.status = 404; seanhalle@5: next(err); seanhalle@5: }); seanhalle@5: seanhalle@5: /// error handlers seanhalle@5: seanhalle@5: // development error handler seanhalle@5: // will print stacktrace seanhalle@5: if (server.get('env') === 'development') { seanhalle@5: server.use(function(err, req, res, next) { seanhalle@5: res.render('error', { seanhalle@5: message: err.message, seanhalle@5: error: err seanhalle@5: }); seanhalle@5: }); seanhalle@5: } seanhalle@5: seanhalle@5: // production error handler seanhalle@5: // no stacktraces leaked to user seanhalle@5: server.use(function(err, req, res, next) { seanhalle@5: res.render('error', { seanhalle@5: message: err.message, seanhalle@5: error: {} seanhalle@5: }); seanhalle@5: }); seanhalle@5: seanhalle@5: seanhalle@5: //in case this code is imported into a higher level project: seanhalle@5: module.exports = server; seanhalle@5: seanhalle@5: //start the server listening and handling requests: seanhalle@5: server.listen(3000, function(){console.log("server listening on port 3000");});