mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
fix:port use
This commit is contained in:
parent
5d77f50160
commit
e9bff466b5
@ -26,7 +26,7 @@ export async function InitWebUi() {
|
||||
//挂载API接口
|
||||
app.all('/api', APIRouter);
|
||||
app.listen(config.port, async () => {
|
||||
console.log(`[NapCat] [WebUi] Current WebUi is running at IP:6099`);
|
||||
console.log(`[NapCat] [WebUi] Current WebUi is running at IP:${config.port}`);
|
||||
})
|
||||
|
||||
}
|
||||
|
@ -6,21 +6,33 @@ const net = require('net');
|
||||
const MAX_PORT_TRY = 100;
|
||||
|
||||
async function tryUsePort(port: number, tryCount: number = 0): Promise<number> {
|
||||
return new Promise((resolve, reject) => {
|
||||
let server = net.createServer().listen(port);
|
||||
server.on('listening', function () {
|
||||
server.close();
|
||||
resolve(port);
|
||||
});
|
||||
server.on('error', function (err: any) {
|
||||
if (err.code === 'EADDRINUSE' && tryCount < MAX_PORT_TRY) {
|
||||
resolve(tryUsePort(port + 1, tryCount + 1));
|
||||
} else if (err.code === 'EADDRINUSE' && tryCount >= MAX_PORT_TRY) {
|
||||
reject("端口尝试失败");
|
||||
} else {
|
||||
reject(err);
|
||||
}
|
||||
});
|
||||
return new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
let server = net.createServer();
|
||||
server.on('listening', () => {
|
||||
server.close();
|
||||
resolve(port);
|
||||
});
|
||||
|
||||
server.on('error', (err: any) => {
|
||||
if (err.code === 'EADDRINUSE') {
|
||||
if (tryCount < MAX_PORT_TRY) {
|
||||
// 使用循环代替递归
|
||||
resolve(tryUsePort(port + 1, tryCount + 1));
|
||||
} else {
|
||||
reject(`端口尝试失败,达到最大尝试次数: ${MAX_PORT_TRY}`);
|
||||
}
|
||||
} else {
|
||||
reject(`遇到错误: ${err.code}`);
|
||||
}
|
||||
});
|
||||
|
||||
// 尝试监听端口
|
||||
server.listen(port);
|
||||
} catch (error) {
|
||||
// 这里捕获到的错误应该是启动服务器时的同步错误
|
||||
reject(`服务器启动时发生错误: ${error}`);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -33,7 +45,7 @@ export interface WebUiConfig {
|
||||
// 读取当前目录下名为 webui.json 的配置文件,如果不存在则创建初始化配置文件
|
||||
export async function WebUIConfig(): Promise<WebUiConfig> {
|
||||
try {
|
||||
let configPath = resolve(__dirname, "./webui.json");
|
||||
let configPath = resolve(__dirname, "./config/webui.json");
|
||||
let config: WebUiConfig = {
|
||||
port: 6099,
|
||||
token: Math.random().toString(36).slice(2),//生成随机密码
|
||||
@ -49,7 +61,7 @@ export async function WebUIConfig(): Promise<WebUiConfig> {
|
||||
|
||||
// 修正端口占用情况
|
||||
const [err, data] = await tryUsePort(parsedConfig.port).then(data => [null, data as number]).catch(err => [err, null]);
|
||||
config.port = data;
|
||||
parsedConfig.port = data;
|
||||
if (err) {
|
||||
//一般没那么离谱 如果真有这么离谱 考虑下 向外抛出异常
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user