www 1.6 KB

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