dodekeract/experience

View on GitHub
lib/index.js

Summary

Maintainability
A
0 mins
Test Coverage
// internal
var Application = require('./application.js');
var debug = require('./utils.js').debug;

// socket.io
var sio = require('socket.io');

// express
var express = require('express');
var compression = require('compression');
var expressSession = require('express-session');
var MongoStore = require('connect-mongo')(expressSession);
var mongoose = require('mongoose');

// function enableWebUI (options) {
//     if (debug) console.log('exp enable webui');
//     var router = express.Router();
//     router.get('/', function (req, res) {
//         res.send('admin ui goes here');
//     });
//     mainApp.use(options.mountPoint, router);
// }

function Experience (options) {
    this.apps = [express()];
    if (options.debug) {
        this.debug = true;
    }
    if (options.compress) {
        debug(this.debug, 'enabled compression');
        this.apps[0].use(compression());
    }

    // session
    debug(this.debug, 'enabled ' + options.mongoose.sessions);
    this.sessionStore = new MongoStore({
        mongooseConnection: mongoose.createConnection(options.mongoose.sessions)
    });

    this.session = expressSession({
        store: this.sessionStore,
        secret: options.sessions.secret || 'mirror image',
        resave: true,
        saveUninitialized: true
    });

    this.apps[0].use(this.session);
}

Experience.prototype.listen = function (port) {
    debug(this.debug, 'listening on ' + port);
    this.apps[0].listen(port);
};

Experience.prototype.add = function (path, app) {
    debug(this.debug, 'mounted as ' + path, app.name);

    if (app.router) {
        this.apps[0].use(path, app.router);
    }
};

module.exports = {
    create: function (options) {
        return new Experience(options);
    },
    Application: Application
};