import http from 'http'; import debug from 'debug'; const log = debug('youtube-maze:server'); /** * Normalize a port into a number, string, or false. */ const normalizePort = val => { const port = parseInt(val, 10); // Named pipe if (isNaN(port)) { return val; } // Port number if (port >= 0) { return port; } return false; }; // Instantiate app import app from '../app.mjs'; const port = normalizePort(process.env.PORT || '3000'); app.set('port', port); // Create HTTP server const server = http.createServer(app); server.listen(port); server.keepAliveTimeout = 60000; server.on('error', error => { if (error.syscall !== 'listen') { throw error; } const bind = typeof port === 'string' ? `Pipe ${port}` : `Port ${port}`; // Handle specific listen errors with friendly messages switch (error.code) { case 'EACCES': console.error(`${bind} requires elevated privileges`); process.exit(1); case 'EADDRINUSE': console.error(`${bind} is already in use`); process.exit(1); default: throw error; } }); server.on('listening', () => { const addr = server.address(); const bind = typeof addr === 'string' ? `pipe ${addr}` : `port ${addr.port}`; log(`Listening on ${bind}`); });