Skip to content

Instantly share code, notes, and snippets.

@Ntropish
Created August 12, 2015 12:28
Show Gist options
  • Save Ntropish/393287db7dce9eecda85 to your computer and use it in GitHub Desktop.
Save Ntropish/393287db7dce9eecda85 to your computer and use it in GitHub Desktop.
/* globals console: false, require: false, process: false, module: false */
var express = require('express');
var async = require('async');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var mongoose = require('mongoose');
var MongoStore = require('connect-mongo')(session);
var passportSocketIo = require('passport.socketio');
var passport = require('passport');
// Make app and require things with app as a dep
var app = express();
var http = require('http').Server(app);
var io = (require('socket.io')(http));
mongoose.connect(process.env.MONGOOSE_URI);
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open',function () {
'use strict';
console.log('connected to mongoose');
});
// Mongoose Models
require('./user')(mongoose);
require('./playlist-session')(mongoose);
// Passport strategy config
require('./passport-configure')(passport);
var store = new MongoStore({ mongooseConnection: db });
var sessionMiddleware = session({
resave: false,
saveUninitialized: false,
secret: 'silly dog',
store: store
});
// Apply middleware
app.use(favicon(path.join(__dirname, 'resources', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(cookieParser());
app.use(sessionMiddleware);
app.use(passport.initialize());
app.use(passport.session());
io.use(passportSocketIo.authorize(
{
key: 'express.sid',
secret: 'silly dog',
store: store,
success: function(data, accept){
'use strict';
console.log('connected to socket.io');
accept();
},
fail: function(data, message, error, accept){
'use strict';
console.log('failed connection to socket.io:', message);
if (error) {
accept(new Error(message));
throw new Error(message);
}
}
}
));
/*
// Middleware to access request from socket
io.use(function(socket, next) {
'use strict';
sessionMiddleware(socket.request, socket.request.res, next);
});
*/
// Configure session namespace
//require('./session-io')(io);
io.of('playlist-session').on('connection', function(socket) {
'use strict';
// TODO: Access user info here
console.log(socket.request.user);
});
// Require routes
var register = require('./routes/register');
var login = require('./routes/login');
var logout = require('./routes/logout');
var index = require('./routes/index');
var friend = require('./routes/friend');
var sessionRoute = require('./routes/session');
// Apply routes
app.use('/', index);
app.use('/register', register);
app.use('/login', login);
app.use('/logout', logout);
app.use('/friend', friend);
app.use('/', sessionRoute);
// Set public directory to serve static
app.use(express.static(path.join(__dirname, 'public')));
// Set view engine and view directory
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
// catch 404 and forward to error handler
app.use(function (req, res, next) {
'use strict';
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function (err, req, res, next) {
'use strict';
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function (err, req, res, next) {
'use strict';
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
http.listen(8686, function(){
'use strict';
console.log('listening on 8686');
});
module.exports = app;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment