app.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. 'use strict';
  2. // nodejs modules
  3. const path = require('path');
  4. const fs = require('fs');
  5. const os = require('os');
  6. process.env.NODE_CONFIG_DIR = `${__dirname}/config`;
  7. // npm modules
  8. const express = require('express'),
  9. session = require('express-session'),
  10. mongoose = require('mongoose'),
  11. bodyParser = require('body-parser'),
  12. config = require('config'),
  13. cookieParser = require('cookie-parser'),
  14. cors = require('cors'),
  15. request = require('request'),
  16. bcrypt = require('bcrypt'),
  17. passportSocketIo = require("passport.socketio");
  18. // global module
  19. const globals = require('./logic/globals');
  20. // database
  21. globals.db.connection = mongoose.connect('mongodb://mongo:27017/musare').connection;
  22. globals.db.connection.on('error', err => console.log('Database error: ' + err.message));
  23. globals.db.connection.once('open', _ => {
  24. console.log('Connected to database');
  25. const app = express(globals.db.connection);
  26. const server = app.listen(80);
  27. globals.io = require('socket.io')(server);
  28. // load all the schemas from the schemas folder into an object
  29. globals.db.models =
  30. // get an array of all the files in the schemas folder
  31. fs.readdirSync(`${__dirname}/schemas`)
  32. // remove the .js from the file names
  33. .map(name => name.split('.').shift())
  34. // create an object with
  35. .reduce((db, name) => {
  36. db[name] = mongoose.model(name, new mongoose.Schema(require(`${__dirname}/schemas/${name}`)));
  37. return db;
  38. }, {});
  39. globals.db.store = new (require('connect-mongo')(session))({ 'mongooseConnection': globals.db.connection });
  40. app.use(session({
  41. secret: config.get('secret'),
  42. key: 'connect.sid',
  43. store: globals.db.store,
  44. resave: true,
  45. saveUninitialized: true,
  46. cookie: { httpOnly: false }
  47. }));
  48. app.use(bodyParser.json());
  49. app.use(bodyParser.urlencoded({ extended: true }));
  50. let corsOptions = Object.assign({}, config.get('cors'));
  51. app.use(cors(corsOptions));
  52. app.options('*', cors(corsOptions));
  53. const coreHandler = require('./logic/coreHandler');
  54. require('./logic/socketHandler')(coreHandler, globals.io);
  55. require('./logic/expressHandler')(coreHandler, app);
  56. });