server.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // Config file
  2. var settings = require('./server_config/settings.json');
  3. var pkg = require('./package.json');
  4. // Libraries
  5. var fs = require('fs');
  6. var async = require('async');
  7. var express = require('express');
  8. var app = express();
  9. var server = require('http').createServer(app);
  10. var io = require('socket.io').listen(server);
  11. var bodyParser = require('body-parser');
  12. var compress = require('compression');
  13. // Internals
  14. var indexController = require('./app/node_controllers/indexController');
  15. var launchTestController = require('./app/node_controllers/launchTestController');
  16. var resultsController = require('./app/node_controllers/resultsController');
  17. var waitingQueueSocket = require('./app/node_controllers/waitingQueueSocket');
  18. var testQueue = require('./app/lib/testQueue');
  19. app.use(compress());
  20. app.use(bodyParser.urlencoded({ extended: false }));
  21. // Redirect www.yellowlab.tools to yellowlab.tools (for SEO)
  22. app.all('*', function(req, res, next) {
  23. if (req.hostname && req.hostname.match(/^www\.yellowlab\.tools/) !== null) {
  24. res.redirect('http://' + req.hostname.replace(/^www\.yellowlab\.tools/, 'yellowlab.tools') + req.url);
  25. } else {
  26. next();
  27. }
  28. });
  29. // Routes definition
  30. app.get('/', function(req, res) { indexController(req, res, settings.googleAnalyticsId, pkg.version); });
  31. app.post('/launchTest', function(req, res) { launchTestController(req, res, testQueue, settings.googleAnalyticsId); });
  32. app.get('/results/:testId', function(req, res) { resultsController(req, res, settings.googleAnalyticsId); });
  33. // Static files
  34. app.use('/public', express.static(__dirname + '/app/public'));
  35. app.use('/bower_components', express.static(__dirname + '/bower_components'));
  36. // Socket.io
  37. io.on('connection', function(socket){
  38. waitingQueueSocket(socket, testQueue);
  39. });
  40. // Create the results folder if it doesn't exist
  41. var resultsPath = 'results';
  42. if (!fs.existsSync(resultsPath)) {
  43. fs.mkdirSync(resultsPath);
  44. }
  45. // Launch the server
  46. server.listen(settings.serverPort, function() {
  47. console.log('Listening on port %d', server.address().port);
  48. });