Fix so server doesn't close process on exit
This commit is contained in:
parent
586da219d1
commit
f2f7d9ef9d
1 changed files with 63 additions and 62 deletions
125
api/server.mjs
125
api/server.mjs
|
@ -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}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
res.addListener('finish', done);
|
||||||
|
res.addListener('close', done);
|
||||||
|
|
||||||
server.listen(port, '0.0.0.0', function(err) {
|
req.addListener('end', function () {
|
||||||
if (err) {
|
if (req.url === '/') {
|
||||||
log.fatal(err)
|
res.writeHead(302, { Location: '/index.html' })
|
||||||
log.event.error('Error starting server: ' + err.message)
|
return res.end()
|
||||||
return process.exit(2)
|
}
|
||||||
}
|
|
||||||
log.event.info(`Server is listening on ${port} serving files on ${staticRoot}`)
|
fileServer.serve(req, res, function (err) {
|
||||||
log.info(`Server is listening on ${port} serving files on ${staticRoot}`)
|
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()
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
Loading…
Reference in a new issue