Преглед изворни кода

Several changes in this commit. Checkout description for more info.

Cleaned up variable names and where stuff is being stored (moved a lot of it into "globals"). Inlined some requires that were only being called once. Added some code to automatically load all the schemas. Schemas are now just defined as objects.
Cameron Kline пре 8 година
родитељ
комит
dd8d555e97
4 измењених фајлова са 44 додато и 52 уклоњено
  1. 38 44
      backend/app.js
  2. 2 2
      backend/schemas/song.js
  3. 2 3
      backend/schemas/station.js
  4. 2 3
      backend/schemas/user.js

+ 38 - 44
backend/app.js

@@ -1,4 +1,4 @@
- 'use strict';
+'use strict';
 
 // nodejs modules
 const path = require('path'),
@@ -11,10 +11,9 @@ process.env.NODE_CONFIG_DIR = `${__dirname}/config`;
 const express          = require('express'),
       session          = require('express-session'),
       mongoose         = require('mongoose'),
-      MongoStore       = require('connect-mongo')(session),
       bodyParser       = require('body-parser'),
       config           = require('config'),
-	  cookieParser	   = require('cookie-parser'),
+      cookieParser     = require('cookie-parser'),
       cors             = require('cors'),
       request          = require('request'),
       passport         = require('passport'),
@@ -25,43 +24,40 @@ const express          = require('express'),
       passportSocketIo = require("passport.socketio");
 
 // global module
-const global = require('./logic/global');
+const globals = require('./logic/globals');
 
 // database
-const MongoDB = mongoose.connect('mongodb://mongo:27017/musare').connection;
+globals.db.connection = mongoose.connect('mongodb://mongo:27017/musare').connection;
 
-MongoDB.on('error', err => {
-	console.log('Database error: ' + err.message);
-});
+globals.db.connection.on('error', err => console.log('Database error: ' + err.message));
+
+globals.db.connection.once('open', _ => {
 
-MongoDB.once('open', () => {
 	console.log('Connected to database');
-	setupExpress();
-});
 
-// setup express and socket.io
-function setupExpress() {
-	const app = express(MongoDB);
+	const app = express(globals.db.connection);
 	const server = app.listen(80);
-	global.io = require('socket.io')(server);
 
-	global.db = {
-		user: require('./schemas/user')(mongoose),
-		station: require('./schemas/station')(mongoose),
-		song: require('./schemas/song')(mongoose)
-	};
+	globals.io = require('socket.io')(server);
 
-	// other custom modules
-	const coreHandler = require('./logic/coreHandler'),
-		  socketHandler = require('./logic/socketHandler'),
-		  expressHandler = require('./logic/expressHandler');
+	// load all the schemas from the schemas folder into an object
+	globals.db.models =
+		// get an array of all the files in the schemas folder
+		fs.readdirSync(`${__dirname}/schemas`)
+		// remove the .js from the file names
+		.map(name => name.split('.').shift())
+		// create an object with
+		.reduce((db, name) => {
+			db[name] = mongoose.model(name, new mongoose.Schema(require(`${__dirname}/schemas/${name}`)));
+			return db;
+		}, {});
 
-	const mongoStore = new MongoStore({'mongooseConnection': MongoDB});
+	globals.db.store = new (require('connect-mongo')(session))({ 'mongooseConnection': globals.db.connection });
 
 	app.use(session({
 		secret: config.get('secret'),
 		key: 'connect.sid',
-		store: mongoStore,
+		store: globals.db.store,
 		resave: true,
 		saveUninitialized: true
 	}));
@@ -69,20 +65,15 @@ function setupExpress() {
 	app.use(passport.initialize());
 	app.use(passport.session());
 
-	passport.serializeUser((user, done) => {
-		done(null, user);
-	});
-
-	passport.deserializeUser((user, done) => {
-		done(null, user);
-	});
+	passport.serializeUser((user, done) => done(null, user));
+	passport.deserializeUser((user, done) => done(null, user));
 
-	global.io.use(passportSocketIo.authorize({
+	globals.io.use(passportSocketIo.authorize({
 		passport: require('passport'),
 		cookieParser: require('cookie-parser'),
 		key: 'connect.sid',
 		secret: config.get('secret'),
-		store: mongoStore,
+		store: globals.db.store,
 		success: (data, accept) => {
 			console.log('success', data);
 			accept();
@@ -93,9 +84,9 @@ function setupExpress() {
 		}
 	}));
 
-	passport.use(new LocalStrategy({usernameField: 'email'}, (email, password, done) => {
+	passport.use(new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {
 		process.nextTick(() => {
-			global.db.user.findOne({"email.address": email}, (err, user) => {
+			globals.db.user.findOne({ "email.address": email }, (err, user) => {
 				if (err) return done(err);
 				if (!user) return done(null, false);
 				bcrypt.compare(password, user.services.password.password, function(err, res) {
@@ -112,12 +103,15 @@ function setupExpress() {
 	}));
 
 	app.use(bodyParser.json());
-	app.use(bodyParser.urlencoded({
-		extended: true
-	}));
+	app.use(bodyParser.urlencoded({ extended: true }));
+
+	let corsOptions = Object.assign({}, config.get('cors'));
 
-	app.use(cors());
+	app.use(cors(corsOptions));
+	app.options('*', cors(corsOptions));
+
+	const coreHandler = require('./logic/coreHandler');
+	require('./logic/socketHandler')(coreHandler, globals.io, app);
+	require('./logic/expressHandler')(coreHandler, app);
+});
 
-	socketHandler(coreHandler, global.io, app);
-	expressHandler(coreHandler, app);
-}

+ 2 - 2
backend/schemas/song.js

@@ -1,7 +1,7 @@
-module.exports = mongoose => mongoose.model('song', new mongoose.Schema({
+module.exports = {
 	id: { type: String, unique: true, required: true },
 	title: { type: String, required: true },
 	artists: [{ type: String }],
 	duration: { type: String, required: true },
 	thumbnail: { type: String, required: true }
-}));
+};

+ 2 - 3
backend/schemas/station.js

@@ -1,4 +1,4 @@
-module.exports = mongoose => mongoose.model('station', new mongoose.Schema({
+module.exports = {
 	id: { type: String, lowercase: true, max: 16, min: 2, index: true, unique: true, required: true },
 	type: { type: String, enum: ["official", "community"], required: true },
 	displayName: { type: String, min: 2, max: 32, required: true },
@@ -15,5 +15,4 @@ module.exports = mongoose => mongoose.model('station', new mongoose.Schema({
 	timePaused: { type: Number, default: 0, required: true },
 	playlist: { type: Array, required: true },
 	genres: [{ type: String }]
-}));
-
+};

+ 2 - 3
backend/schemas/user.js

@@ -1,4 +1,4 @@
-module.exports = mongoose => mongoose.model('user', new mongoose.Schema({
+module.exports = {
 	username: { type: String, required: true },
 	email: {
 		verified: { type: Boolean, default: false, required: true },
@@ -20,5 +20,4 @@ module.exports = mongoose => mongoose.model('user', new mongoose.Schema({
 		songsRequested: { type: Number, default: 0 }
 	},
 	createdAt: { type: Date, default: Date.now() }
-}));
-
+};