Fix so server doesn't close process on exit

This commit is contained in:
Jonatan Nilsson 2020-09-12 03:55:13 +00:00
parent 586da219d1
commit f2f7d9ef9d

View file

@ -7,75 +7,76 @@ import coremonitor from './core/coremonitor.mjs'
import onConnection from './routerio.mjs' import onConnection from './routerio.mjs'
export function run(config, db, log, core, http, port) { export function run(config, db, log, core, http, port) {
const __dirname = path.dirname(fileURLToPath(import.meta.url)) return new Promise(function(resolve, reject) {
const staticRoot = path.join(__dirname,'../public') const __dirname = path.dirname(fileURLToPath(import.meta.url))
const staticRoot = path.join(__dirname,'../public')
const fileServer = new nStatic.Server(staticRoot) const fileServer = new nStatic.Server(staticRoot)
const server = http.createServer(function (req, res) { const server = http.createServer(function (req, res) {
const child = log.child({}) const child = log.child({})
const d1 = new Date().getTime() const d1 = new Date().getTime()
let finishedRequest = false let finishedRequest = false
var done = function () { var done = function () {
if (finishedRequest) return if (finishedRequest) return
finishedRequest = true finishedRequest = true
if (req.url === '/main.css.map') return if (req.url === '/main.css.map') return
var requestTime = new Date().getTime() - d1 var requestTime = new Date().getTime() - d1
let level = 'debug' let level = 'debug'
if (res.statusCode >= 400) { if (res.statusCode >= 400) {
level = 'warn' level = 'warn'
} }
if (res.statusCode >= 500) { if (res.statusCode >= 500) {
level = 'error' level = 'error'
}
let status = ''
if (res.statusCode >= 400) {
status = res.statusCode + ' '
}
child[level]({
duration: requestTime,
status: res.statusCode,
}, `<-- ${status}${req.method} ${req.url}`)
}
res.addListener('finish', done);
res.addListener('close', done);
req.addListener('end', function () {
if (req.url === '/') {
res.writeHead(302, { Location: '/index.html' })
return res.end()
}
fileServer.serve(req, res, function (err) {
if (err) {
if (err.status !== 404) {
log.error(err, req.url);
}
res.writeHead(err.status, err.headers);
res.end(err.message);
} }
});
}).resume()
})
const io = new socket(server) let status = ''
io.on('connection', onConnection.bind(this, io, config, db, log, core)) if (res.statusCode >= 400) {
status = res.statusCode + ' '
}
coremonitor(io, config, db, log, core) child[level]({
duration: requestTime,
status: res.statusCode,
}, `<-- ${status}${req.method} ${req.url}`)
}
server.listen(port, '0.0.0.0', function(err) { res.addListener('finish', done);
if (err) { res.addListener('close', done);
log.fatal(err)
log.event.error('Error starting server: ' + err.message) req.addListener('end', function () {
return process.exit(2) if (req.url === '/') {
} res.writeHead(302, { Location: '/index.html' })
log.event.info(`Server is listening on ${port} serving files on ${staticRoot}`) return res.end()
log.info(`Server is listening on ${port} serving files on ${staticRoot}`) }
fileServer.serve(req, res, function (err) {
if (err) {
if (err.status !== 404) {
log.error(err, req.url);
}
res.writeHead(err.status, err.headers);
res.end(err.message);
}
});
}).resume()
})
const io = new socket(server)
io.on('connection', onConnection.bind(this, io, config, db, log, core))
coremonitor(io, config, db, log, core)
server.listen(port, '0.0.0.0', function(err) {
if (err) {
return reject(err)
}
log.event.info(`Server is listening on ${port} serving files on ${staticRoot}`)
log.info(`Server is listening on ${port} serving files on ${staticRoot}`)
resolve()
})
}) })
} }