www 1.7 KB

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