feat: 添加类型注释
This commit is contained in:
+140
@@ -0,0 +1,140 @@
|
||||
import path from 'path';
|
||||
import {
|
||||
dirname
|
||||
} from 'path';
|
||||
import {
|
||||
fileURLToPath
|
||||
} from 'url';
|
||||
import Koa from 'koa';
|
||||
import getRouter from 'koa-router';
|
||||
import koaBody from 'koa-body';
|
||||
import fs from "fs";
|
||||
// 静态文件服务
|
||||
import koaStatic from 'koa-static'
|
||||
// 虚拟路径
|
||||
import koaMount from 'koa-mount';
|
||||
// import { ConfigHelper, DBHelper } from "funjia-server/lib/funjia-server.mjs";
|
||||
import ConfigHelper from './ConfigHelper.mjs';
|
||||
import DBHelper from './DBHelper.mjs';
|
||||
|
||||
|
||||
const __dirname = dirname(fileURLToPath(
|
||||
import.meta.url));
|
||||
|
||||
ConfigHelper.initConfig();
|
||||
|
||||
(async () => await DBHelper.init())();
|
||||
|
||||
|
||||
export default CreateServer
|
||||
|
||||
/**
|
||||
* 创建服务
|
||||
* port: 服务端口号
|
||||
*/
|
||||
function CreateServer(port = 4873) {
|
||||
const router = new getRouter();
|
||||
const app = new Koa();
|
||||
app.use(koaBody());
|
||||
const staticPath = './static'
|
||||
app.use(
|
||||
koaMount('/resource/static', koaStatic(
|
||||
path.join(__dirname, staticPath), {}
|
||||
))
|
||||
)
|
||||
|
||||
// app.use(koaStatic('.'));
|
||||
|
||||
app.use(router.routes());
|
||||
app.use(router.allowedMethods());
|
||||
|
||||
|
||||
// 初始化路由
|
||||
const initRouter = (folderPath: string) => {
|
||||
// 读取文件夹中的文件列表
|
||||
fs.readdir(folderPath, async (err, files) => {
|
||||
if (err) {
|
||||
console.error('Error reading directory:', err);
|
||||
return;
|
||||
}
|
||||
|
||||
// 筛选出.js 文件
|
||||
// const jsFiles = files.filter(file => path.extname(file) === '.mjs');
|
||||
|
||||
for (const file of files) {
|
||||
try {
|
||||
const filePath = path.join(folderPath, file);
|
||||
const stats = await fs.statSync(filePath);
|
||||
if (stats.isDirectory()) {
|
||||
await initRouter(filePath);
|
||||
}
|
||||
else if (stats.isFile()) {
|
||||
// 构建文件的完整路径
|
||||
const filePath = path.join(folderPath, file);
|
||||
// 动态导入文件
|
||||
const module = await import("./" + path.relative(__dirname, filePath));
|
||||
// 在这里可以对导入的模块进行处理,例如调用其中的函数或使用其导出的对象
|
||||
module.default(router);
|
||||
// console.log(module);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`Error importing ${file}:`, error);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
(async () => {
|
||||
// 目标文件夹的路径
|
||||
const folderPath = './routers';
|
||||
|
||||
await initRouter(folderPath);
|
||||
})();
|
||||
|
||||
let server = null;
|
||||
|
||||
const startServer = () => {
|
||||
server = app.listen(port, () => {
|
||||
console.log('server is listen in ', port);
|
||||
});
|
||||
|
||||
server.on('close', (err: any, socket: any) => {
|
||||
server = null;
|
||||
console.log('server is close');
|
||||
});
|
||||
}
|
||||
|
||||
startServer();
|
||||
}
|
||||
|
||||
// const bH = new BackupHelper();
|
||||
|
||||
// 调度任务 (该模块内存占用会持续上升不建议使用,建议使用系统本身的调度任务)
|
||||
// const task = cron.schedule('* */1 * * * Sunday', () => {
|
||||
// console.log('running a task every 10 seconds');
|
||||
// task.stop();
|
||||
// server.close(async () => {
|
||||
// await bH.bakFile(ConfigHelper.config.dbBak);
|
||||
// startServer();
|
||||
// });
|
||||
// }, {
|
||||
// scheduled: false,
|
||||
// // https://timezonedb.com/download
|
||||
// timezone: "Asia/Shanghai"
|
||||
// });
|
||||
|
||||
// task.start();
|
||||
|
||||
// const delay = () => new Promise((resolve) => {
|
||||
// setTimeout(() => {
|
||||
// resolve(true);
|
||||
// }, 1000 * 10);
|
||||
// });
|
||||
|
||||
// (async () => {
|
||||
// for (let i = 0; i < 20; i++) {
|
||||
// console.log('running a task every 10 seconds');
|
||||
// await delay();
|
||||
// await bH.bakFile(ConfigHelper.config.dbBak);
|
||||
// }
|
||||
// })();
|
||||
Reference in New Issue
Block a user