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