UNPKG

@sword-code-practice/sword-plugin-server

Version:

sword框架内置在运行server上的插件

62 lines (59 loc) 1.44 kB
import { createServer } from 'http'; import net from 'net'; import { log } from '@sword-code-practice/sword-plugin-log'; 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 = () => { log.info(`HTTP\u670D\u52A1\u542F\u52A8\u4E2D...`); const server = createServer(app); try { server.listen(serverConfig.port); log.success(`\u7A0B\u5E8F\u8FD0\u884C\u5728${serverConfig.port}\u7AEF\u53E3\u4E0A`); } catch (error) { 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.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 } }; }; export { useServer };