/** * @file WebUI服务入口文件 */ import express from 'express'; import { LogWrapper } from '@/common/log'; import { NapCatPathWrapper } from '@/common/path'; import { WebUiConfigWrapper } from '@webapi/helper/config'; import { ALLRouter } from '@webapi/router'; import { cors } from '@webapi/middleware/cors'; import { createUrl } from '@webapi/utils/url'; import { sendSuccess } from '@webapi/utils/response'; // 实例化Express const app = express(); /** * 初始化并启动WebUI服务。 * 该函数配置了Express服务器以支持JSON解析和静态文件服务,并监听6099端口。 * 无需参数。 * @returns {Promise} 无返回值。 */ export let WebUiConfig: WebUiConfigWrapper; export let webUiPathWrapper: NapCatPathWrapper; export async function InitWebUi(logger: LogWrapper, pathWrapper: NapCatPathWrapper) { webUiPathWrapper = pathWrapper; WebUiConfig = new WebUiConfigWrapper(); const config = await WebUiConfig.GetWebUIConfig(); if (config.port == 0) { logger.log('[NapCat] [WebUi] Current WebUi is not run.'); return; } // ------------注册中间件------------ // 使用express的json中间件 app.use(express.json()); // CORS中间件 // TODO: app.use(cors); // ------------中间件结束------------ // ------------挂载路由------------ // 挂载静态路由(前端),路径为 [/前缀]/webui app.use(config.prefix + '/webui', express.static(pathWrapper.staticPath)); // 挂载API接口 app.use(config.prefix + '/api', ALLRouter); // 初始服务(先放个首页) // WebUI只在config.prefix所示路径上提供服务,可配合Nginx挂载到子目录中 app.all(config.prefix + '/', (_req, res) => { sendSuccess(res, null, 'NapCat WebAPI is now running!'); }); // ------------路由挂载结束------------ // ------------启动服务------------ app.listen(config.port, config.host, async () => { // 启动后打印出相关地址 const port = config.port.toString(), searchParams = { token: config.token }, path = `${config.prefix}/webui`; if (config.host !== '' && config.host !== '0.0.0.0') { logger.log(`[NapCat] [WebUi] WebUi User Panel Url: ${createUrl(config.host, port, path, searchParams)}`); logger.log(`[NapCat] [WebUi] WebUi User Panel Url: https://napcat.152710.xyz/web_login?back=http://${config.host}:${config.port}${config.prefix}&token=${config.token}`); } logger.log(`[NapCat] [WebUi] WebUi Local Panel Url: ${createUrl('127.0.0.1', port, path, searchParams)}`); logger.log(`[NapCat] [WebUi] WebUi Local Panel Url: https://napcat.152710.xyz/web_login?back=http://127.0.0.1:${config.port}${config.prefix}&token=${config.token}`); }); // ------------Over!------------ }