www 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #!/usr/bin/env node
  2. /**
  3. * Created by Hongcai Deng on 2015/12/28.
  4. */
  5. 'use strict';
  6. let path = require('path');
  7. let app = require(path.join(__dirname, '..', 'app'));
  8. let ioApp = require(path.join(__dirname, '..', 'modules/io'));
  9. let debug = require('debug')('server');
  10. let io = require('socket.io');
  11. let http = require('http');
  12. /**
  13. * Get port from environment and store in Express.
  14. */
  15. let port = normalizePort(process.env.PORT || '3000');
  16. app.set('port', port);
  17. /**
  18. * Create HTTP server.
  19. */
  20. let server = http.createServer(app);
  21. ioApp(io(server));
  22. /**
  23. * Listen on provided port, on all network interfaces.
  24. */
  25. server.listen(port);
  26. server.on('error', onError);
  27. server.on('listening', onListening);
  28. /**
  29. * Normalize a port into a number, string, or false.
  30. */
  31. function normalizePort(val) {
  32. let port = parseInt(val, 10);
  33. if (isNaN(port)) {
  34. // named pipe
  35. return val;
  36. }
  37. if (port >= 0) {
  38. // port number
  39. return port;
  40. }
  41. return false;
  42. }
  43. /**
  44. * Event listener for HTTP server "error" event.
  45. */
  46. function onError(error) {
  47. if (error.syscall !== 'listen') {
  48. throw error;
  49. }
  50. let bind = typeof port === 'string'
  51. ? 'Pipe ' + port
  52. : 'Port ' + port;
  53. // handle specific listen errors with friendly messages
  54. switch (error.code) {
  55. case 'EACCES':
  56. console.error(bind + ' requires elevated privileges');
  57. process.exit(1);
  58. break;
  59. case 'EADDRINUSE':
  60. console.error(bind + ' is already in use');
  61. process.exit(1);
  62. break;
  63. default:
  64. throw error;
  65. }
  66. }
  67. /**
  68. * Event listener for HTTP server "listening" event.
  69. */
  70. function onListening() {
  71. let addr = server.address();
  72. let bind = typeof addr === 'string'
  73. ? 'pipe ' + addr
  74. : 'port ' + addr.port;
  75. debug('Listening on ' + bind);
  76. }