server.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. var express = require('express'),
  2. async = require('async'),
  3. pg = require("pg"),
  4. Pool = require("pg-pool"),
  5. cookieParser = require('cookie-parser'),
  6. bodyParser = require('body-parser'),
  7. methodOverride = require('method-override'),
  8. app = express(),
  9. server = require('http').Server(app),
  10. io = require('socket.io')(server);
  11. var config = {
  12. host: 'localhost',
  13. user: 'postgres',
  14. password: '',
  15. database: 'postgres',
  16. max: 10, // max number of clients in pool
  17. idleTimeoutMillis: 1000, // close & remove clients which have been idle > 1 second
  18. };
  19. var client = new Pool(config)
  20. io.set('transports', ['polling']);
  21. var port = process.env.PORT || 4000;
  22. io.sockets.on('connection', function (socket) {
  23. socket.emit('message', { text : 'Welcome!' });
  24. socket.on('subscribe', function (data) {
  25. socket.join(data.channel);
  26. });
  27. });
  28. async.retry(
  29. {times: 1000, interval: 1000},
  30. function(err, client) {
  31. if (err) {
  32. return console.err("Giving up");
  33. }
  34. console.log("Connected to db");
  35. getVotes(client);
  36. }
  37. );
  38. function getVotes(client) {
  39. client.query('SELECT vote, COUNT(id) AS count FROM votes GROUP BY vote', [], function(err, result) {
  40. if (err) {
  41. console.error("Error performing query: " + err);
  42. } else {
  43. var votes = result.rows[0].count
  44. io.sockets.emit("scores", JSON.stringify(votes));
  45. }
  46. setTimeout(function() {getVotes(client) }, 1000);
  47. });
  48. }
  49. app.use(cookieParser());
  50. app.use(bodyParser());
  51. app.use(methodOverride('X-HTTP-Method-Override'));
  52. app.use(function(req, res, next) {
  53. res.header("Access-Control-Allow-Origin", "*");
  54. res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  55. res.header("Access-Control-Allow-Methods", "PUT, GET, POST, DELETE, OPTIONS");
  56. next();
  57. });
  58. app.use(express.static(__dirname + '/views'));
  59. app.get('/', function (req, res) {
  60. res.sendFile(path.resolve(__dirname + '/views/index.html'));
  61. });
  62. server.listen(port, function () {
  63. var port = server.address().port;
  64. console.log('App running on port ' + port);
  65. });