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