@digicms/cms
Version:
An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite
65 lines (49 loc) • 1.25 kB
JavaScript
;
const http = require('http');
const createHTTPServer = (strapi, koaApp) => {
const connections = new Set();
// lazy creation of the request listener
let handler;
const listener = function handleRequest(req, res) {
if (!handler) {
handler = koaApp.callback();
}
return handler(req, res);
};
const server = http.createServer(listener);
server.on('connection', (connection) => {
connections.add(connection);
connection.on('close', () => {
connections.delete(connection);
});
});
// handle port in use cleanly
server.on('error', (err) => {
if (err.code === 'EADDRINUSE') {
return strapi.stopWithError(`The port ${err.port} is already used by another application.`);
}
strapi.log.error(err);
});
server.destroy = async () => {
for (const connection of connections) {
connection.destroy();
connections.delete(connection);
}
if (!server.listening) {
return;
}
return new Promise((resolve, reject) => {
server.close((error) => {
if (error) {
reject(error);
} else {
resolve();
}
});
});
};
return server;
};
module.exports = {
createHTTPServer,
};