(function () { "use strict"; var stack = require('./lib/stack') , gcf = require('express-chromeframe') , addSendJson = require('./lib/jason-res-json') , corsSession = require('./lib/connect-cors-session') , nowww = require('nowww') , queryparser = require('connect-queryparser') , xcors = require('connect-xcors') , cors , session , connect ; connect = stack.create( addSendJson() ); cors = xcors(); session = corsSession(); connect.addMiddleware( nowww() , queryparser() , cors , session , gcf() ); // TODO push into middleware layer cors.config.headers = cors.config.headers.concat(session.headers.slice()); module.exports = connect; }());
(function () { "use strict"; require('http-json')(require('http')); var connect = require('connect') , fs = require('fs') , path = require('path') , cookielessSession = require('connect-cookieless-session') , pathname = require('connect-pathname') , gcf = require('express-chromeframe') , nowww = require('nowww') , xcors = require('connect-xcors') , cors = xcors() , session = cookielessSession() , app = connect() , version = JSON.parse( fs.readFileSync( path.join(__dirname, '..', 'package.json') , 'utf8' ) ).version , semver ; function parseSemver(version) { // semver, major, minor, patch // https://github.com/mojombo/semver/issues/32 // https://github.com/isaacs/node-semver/issues/10 // optional v var m = /^\s*(v)?([0-9]+)(\.([0-9]+))(\.([0-9]+))(([\-+])([a-zA-Z0-9\.]+))?\s*$/.exec(version) || [] , ver = { semver: m[0] || version , major: m[2] , minor: m[4] , patch: m[6] , revision: m[7] } ; if (!/^v/.test(ver.semver)) { ver.semver = 'v' + ver.semver; } if ('+' === m[8]) { ver.build = m[9]; } if ('-' === m[8]) { ver.release = m[9]; } return ver; } function getVersion(res, req, next) { res.json(semver); } semver = parseSemver(version); connect.router = require('connect_router'); connect.corsPolicy = cors.config; cors.config.headers = cors.config.headers.concat(session.headers.slice()); app .use(nowww()) .use(gcf()) .use(pathname()) .use(connect.query()) .use(connect.json()) .use(connect.urlencoded()) .use(cors) .use(session) .use(connect.static(__dirname + '/../static')) .use(connect.static(__dirname + '/../public')) .use(connect.static(__dirname + '/../var/public')) .use('/version', getVersion) .use(connect.favicon()) ; module.exports = app; }());
var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); // use and abuse app.use(favicon()); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded()); app.use(cookieParser()); app.use(require('stylus').middleware(path.join(__dirname, 'public'))); app.use(express.static(path.join(__dirname, 'public'))); app.use(app.router); app.use(chromeframe()); // define routes app.get('/', routes.index); app.get('/events', events.list); app.get('/events/:id', events.get); app.get('/review', review.index); // catch 404 and forwarding to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // error handlers
app.configure(function () { var APP_ENV = app.get('env'); var IS_PRODUCTION = APP_ENV === 'production'; var USE_VIEW_CACHE = IS_PRODUCTION ? 'memory' : false; var PATH_TO_VIEWS = path.join(__dirname, '..', '/views'); var LOG_MODE = IS_PRODUCTION ? 'default' : 'dev'; var COOKIE_SECRET = process.env.COOKIE_SECRET || 'cookie secret'; var SESSION_SECRET = process.env.SESSION_SECRET || 'session secret'; var PATH_TO_PUBLIC = path.join(__dirname, '..', 'public'); var PATH_TO_FAVICON = path.join(PATH_TO_PUBLIC, 'favicon.ico'); var dayInMilliseconds = 24 * 60 * 60 * 1000; var weekInMilliseconds = dayInMilliseconds * 7; var GOOGLE_ANALYTICS_TRACKING_ID = process.env.GOOGLE_ANALYTICS_TRACKING_ID || null; log.info('configure app in env: ' + APP_ENV); // Swig templating config app.engine('html', swig.renderFile); app.set('view engine', 'html'); app.set('views', PATH_TO_VIEWS); app.set('view cache', USE_VIEW_CACHE); swig.setDefaults({ locals: { siteTitle: 'Masalanpelto', GOOGLE_ANALYTICS_TRACKING_ID: GOOGLE_ANALYTICS_TRACKING_ID }, cache: USE_VIEW_CACHE }); swig.setFilter('filesize', filters.filesize); // Other Express config app.set('case sensitive routing', true); app.set('strict routing', true); // Middleware app.use(express.logger(LOG_MODE)); app.use(express.compress()); app.use(express.favicon(PATH_TO_FAVICON, { maxAge: weekInMilliseconds })); app.use(chromeframe()); app.use(express.bodyParser()); app.use(express.cookieParser(COOKIE_SECRET)); app.use(express.cookieSession({ secret: SESSION_SECRET })); app.use(express.csrf()); // Expose session data to the views app.use(function (req, res, next) { res.locals.session = req.session; res.locals.csrfToken = req.csrfToken(); next(); }); // Generate navigation links for the response app.use(function (req, res, next) { res.locals.nav = nav.getNav(req.path, req.session); next(); }); app.use(function (req, res, next) { res.locals.messages = req.session.messages || []; req.session.messages = []; next(); }); app.use(express.static(PATH_TO_PUBLIC, { maxAge: dayInMilliseconds })); // Add extra error reporting for non-production envs if (!IS_PRODUCTION) { app.use(express.errorHandler()); } });