@demobook/server
Version:
## Setup
73 lines (60 loc) • 2.03 kB
text/typescript
import { readFileSync } from 'fs';
// import { join } from 'path';
import * as express from 'express';
import * as bodyParser from 'body-parser';
// import * as favicon from 'serve-favicon';
import { router } from './router';
import { setup as setupBot } from './bot';
export function runServer() {
const app = express();
const port = process.env.PORT || 3000;
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
// app.use(favicon(join(__dirname, '..', 'assets', 'favicon.ico')));
// HMR
if (process.env.NODE_ENV !== 'production') {
const webpack = require('webpack');
const webpackHotMiddleware = require('webpack-hot-middleware');
const webpackDevMiddleware = require('webpack-dev-middleware');
const config = require('../../webpack.client.config');
const compiler = webpack(config);
app.use(webpackHotMiddleware(compiler));
app.use(
webpackDevMiddleware(compiler, {
publicPath: config.output.publicPath
})
);
}
router(app);
setupBot();
const server =
process.env.SSL_KEY && process.env.SSL_CERT
? require('https').createServer(
{
key: readFileSync(process.env.SSL_KEY),
cert: readFileSync(process.env.SSL_CERT)
},
app
)
: require('http').createServer(app);
server.listen(port);
server.on('listening', () => {
const addr = server.address();
const bind = typeof addr === 'string' ? `pipe ${addr}` : `port ${addr.port}`;
console.log(`Listening on ${bind}`);
});
server.on('error', (err: NodeJS.ErrnoException) => {
if (err.syscall !== 'listen') throw err;
const bind = typeof port === 'string' ? `Pipe ${port}` : `Port ${port}`;
switch (err.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 err;
}
});
}