@sword-code-practice/sword-plugin-server
Version:
sword框架内置在运行server上的插件
70 lines (63 loc) • 1.78 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
const http = require('http');
const net = require('net');
const swordPluginLog = require('@sword-code-practice/sword-plugin-log');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; }
const net__default = /*#__PURE__*/_interopDefaultLegacy(net);
const defaultServerConfig = {
port: 3e3
};
const startServer = async (app, serverConfig = defaultServerConfig) => {
let key;
for (key in serverConfig) {
if (!serverConfig[key]) {
serverConfig[key] = defaultServerConfig[key];
}
}
const start = () => {
swordPluginLog.log.info(`HTTP\u670D\u52A1\u542F\u52A8\u4E2D...`);
const server = http.createServer(app);
try {
server.listen(serverConfig.port);
swordPluginLog.log.success(`\u7A0B\u5E8F\u8FD0\u884C\u5728${serverConfig.port}\u7AEF\u53E3\u4E0A`);
} catch (error) {
swordPluginLog.log.err(JSON.stringify(error));
}
};
const tryUsePort = async () => {
const used = await portUsed(serverConfig.port);
if (used === false) {
serverConfig.port && serverConfig.port++;
return await tryUsePort();
} else {
return true;
}
};
if (await tryUsePort()) {
start();
}
};
const portUsed = (port) => {
return new Promise((resolve) => {
const server = net__default.createServer().listen(port);
server.on("listening", () => {
server.close();
resolve(port);
});
server.on("error", (err) => {
if (err.code == "EADDRINUSE") {
resolve(false);
}
});
});
};
const useServer = () => {
return {
name: "server",
server: {
start: startServer
}
};
};
exports.useServer = useServer;