Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
60724a923e |
@@ -3,21 +3,21 @@ import _ from "lodash";
|
|||||||
import LogHelper from "./LogHelper.mjs";
|
import LogHelper from "./LogHelper.mjs";
|
||||||
|
|
||||||
class DataLogHelper {
|
class DataLogHelper {
|
||||||
name = "";
|
name: string = "";
|
||||||
type = "";
|
type: string = "";
|
||||||
id = null;
|
id: any = null;
|
||||||
|
|
||||||
constructor({
|
constructor({
|
||||||
name,
|
name,
|
||||||
type
|
type
|
||||||
}) {
|
}: any) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
async addDataLog({
|
async addDataLog({
|
||||||
data
|
data
|
||||||
}) {
|
}: any) {
|
||||||
const {
|
const {
|
||||||
name,
|
name,
|
||||||
type
|
type
|
||||||
@@ -61,10 +61,10 @@ export default class CURDHelper {
|
|||||||
db,
|
db,
|
||||||
name,
|
name,
|
||||||
params
|
params
|
||||||
}) {
|
}: any) {
|
||||||
await db.read();
|
await db.read();
|
||||||
/******************************参数过滤**********************************/
|
/******************************参数过滤**********************************/
|
||||||
const data = db.data[name].filter((item) => {
|
const data = db.data[name].filter((item: any) => {
|
||||||
let isMatch = true;
|
let isMatch = true;
|
||||||
for (let field in params) {
|
for (let field in params) {
|
||||||
if (["page", "pageSize"].includes(field)) {
|
if (["page", "pageSize"].includes(field)) {
|
||||||
@@ -101,7 +101,7 @@ export default class CURDHelper {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
code: 0,
|
code: 0,
|
||||||
data: batchData.sort((a, b) => {
|
data: batchData.sort((a:any, b:any) => {
|
||||||
return a.sort - b.sort;
|
return a.sort - b.sort;
|
||||||
}) || [],
|
}) || [],
|
||||||
total: data.length
|
total: data.length
|
||||||
@@ -116,14 +116,14 @@ export default class CURDHelper {
|
|||||||
db,
|
db,
|
||||||
name,
|
name,
|
||||||
params
|
params
|
||||||
}) {
|
}:any) {
|
||||||
await db.read();
|
await db.read();
|
||||||
const data = db.data[name];
|
const data = db.data[name];
|
||||||
const query = params;
|
const query = params;
|
||||||
|
|
||||||
let detail = {};
|
let detail = {};
|
||||||
if (query.id && data) {
|
if (query.id && data) {
|
||||||
detail = data.find((item) => {
|
detail = data.find((item:any) => {
|
||||||
return item.id == query.id;
|
return item.id == query.id;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -142,7 +142,7 @@ export default class CURDHelper {
|
|||||||
db,
|
db,
|
||||||
name,
|
name,
|
||||||
data
|
data
|
||||||
}) {
|
}:any) {
|
||||||
await db.read();
|
await db.read();
|
||||||
|
|
||||||
// You can also use this syntax if you prefer
|
// You can also use this syntax if you prefer
|
||||||
@@ -154,7 +154,7 @@ export default class CURDHelper {
|
|||||||
const id = data.id;
|
const id = data.id;
|
||||||
|
|
||||||
if (id && dataList) {
|
if (id && dataList) {
|
||||||
const currentDetail = dataList.find(item => item.id == id);
|
const currentDetail = dataList.find((item:any) => item.id == id);
|
||||||
if (currentDetail) {
|
if (currentDetail) {
|
||||||
_.merge(currentDetail, data);
|
_.merge(currentDetail, data);
|
||||||
}
|
}
|
||||||
@@ -187,7 +187,7 @@ export default class CURDHelper {
|
|||||||
db,
|
db,
|
||||||
name,
|
name,
|
||||||
data
|
data
|
||||||
}) {
|
}:any) {
|
||||||
await db.read();
|
await db.read();
|
||||||
|
|
||||||
if (!db.data[name])
|
if (!db.data[name])
|
||||||
@@ -228,7 +228,7 @@ export default class CURDHelper {
|
|||||||
db,
|
db,
|
||||||
name,
|
name,
|
||||||
data
|
data
|
||||||
}) {
|
}: any) {
|
||||||
await db.read();
|
await db.read();
|
||||||
|
|
||||||
// You can also use this syntax if you prefer
|
// You can also use this syntax if you prefer
|
||||||
@@ -239,12 +239,12 @@ export default class CURDHelper {
|
|||||||
const ids = data.ids;
|
const ids = data.ids;
|
||||||
|
|
||||||
if (ids.length > 0 && dataList) {
|
if (ids.length > 0 && dataList) {
|
||||||
let id = null;
|
let id: any = null;
|
||||||
const delDataList = [];
|
const delDataList = [];
|
||||||
|
|
||||||
for (let i = 0; i < ids.length; i++) {
|
for (let i = 0; i < ids.length; i++) {
|
||||||
id = ids[i];
|
id = ids[i];
|
||||||
const idx = dataList.findIndex(item => item.id == id);
|
const idx = dataList.findIndex((item: any) => item.id == id);
|
||||||
if (idx != -1) {
|
if (idx != -1) {
|
||||||
delDataList.push(dataList[idx]);
|
delDataList.push(dataList[idx]);
|
||||||
dataList.splice(idx, 1);
|
dataList.splice(idx, 1);
|
||||||
@@ -5,7 +5,7 @@ import fs from "fs";
|
|||||||
* 配置信息帮助类
|
* 配置信息帮助类
|
||||||
*/
|
*/
|
||||||
export default class ConfigHelper {
|
export default class ConfigHelper {
|
||||||
static config = null;
|
static config: any = null;
|
||||||
static initConfig() {
|
static initConfig() {
|
||||||
this.config = yaml.parse(fs.readFileSync("./config.yml").toString());
|
this.config = yaml.parse(fs.readFileSync("./config.yml").toString());
|
||||||
}
|
}
|
||||||
@@ -6,10 +6,10 @@ import {
|
|||||||
} from "./dbServer.mjs";
|
} from "./dbServer.mjs";
|
||||||
|
|
||||||
export default class DBHelper {
|
export default class DBHelper {
|
||||||
static baseDB = null;
|
static baseDB: any = null;
|
||||||
static resourceDB = null;
|
static resourceDB: any = null;
|
||||||
static backupDB = null;
|
static backupDB: any = null;
|
||||||
static logDB = null;
|
static logDB: any = null;
|
||||||
|
|
||||||
static async init() {
|
static async init() {
|
||||||
this.baseDB = await getDb();
|
this.baseDB = await getDb();
|
||||||
@@ -6,7 +6,7 @@ export default class LogHelper {
|
|||||||
tableName,
|
tableName,
|
||||||
type,
|
type,
|
||||||
data
|
data
|
||||||
}) {
|
}:any) {
|
||||||
const db = await DBHelper.getLogDb();
|
const db = await DBHelper.getLogDb();
|
||||||
return CURDHelper.create({
|
return CURDHelper.create({
|
||||||
db,
|
db,
|
||||||
@@ -25,7 +25,7 @@ export default class LogHelper {
|
|||||||
|
|
||||||
static async modifyDataLogStatus({
|
static async modifyDataLogStatus({
|
||||||
id
|
id
|
||||||
}) {
|
}:any) {
|
||||||
const db = await DBHelper.getLogDb();
|
const db = await DBHelper.getLogDb();
|
||||||
const {
|
const {
|
||||||
data,
|
data,
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
import CURDHelper from "./CURDHelper.mjs";
|
import CURDHelper from "./CURDHelper.mjs";
|
||||||
|
|
||||||
export default class RouterFactor {
|
export default class RouterFactor {
|
||||||
name = "";
|
name: string = "";
|
||||||
db = null;
|
db: any = null;
|
||||||
router = null;
|
router: any = null;
|
||||||
constructor({
|
constructor({
|
||||||
router: _router,
|
router: _router,
|
||||||
db: _db,
|
db: _db,
|
||||||
name: _name
|
name: _name
|
||||||
}) {
|
}: any) {
|
||||||
this.router = _router;
|
this.router = _router;
|
||||||
this.db = _db;
|
this.db = _db;
|
||||||
this.name = _name;
|
this.name = _name;
|
||||||
@@ -24,7 +24,7 @@ export default class RouterFactor {
|
|||||||
router
|
router
|
||||||
} = this;
|
} = this;
|
||||||
|
|
||||||
router.post(`/api/${name}/list`, async (ctx) => {
|
router.post(`/api/${name}/list`, async (ctx: any) => {
|
||||||
// 设置头类型, 如果不设置,会直接下载该页面
|
// 设置头类型, 如果不设置,会直接下载该页面
|
||||||
ctx.type = 'application/json';
|
ctx.type = 'application/json';
|
||||||
const body = ctx.request.body;
|
const body = ctx.request.body;
|
||||||
@@ -47,7 +47,7 @@ export default class RouterFactor {
|
|||||||
db,
|
db,
|
||||||
router
|
router
|
||||||
} = this;
|
} = this;
|
||||||
router.get(`/api/${name}`, async (ctx) => {
|
router.get(`/api/${name}`, async (ctx:any) => {
|
||||||
// 设置头类型, 如果不设置,会直接下载该页面
|
// 设置头类型, 如果不设置,会直接下载该页面
|
||||||
ctx.type = 'application/json';
|
ctx.type = 'application/json';
|
||||||
const query = ctx.request.query;
|
const query = ctx.request.query;
|
||||||
@@ -70,7 +70,7 @@ export default class RouterFactor {
|
|||||||
db,
|
db,
|
||||||
router
|
router
|
||||||
} = this;
|
} = this;
|
||||||
router.post(`/api/${name}/upd`, async (ctx) => {
|
router.post(`/api/${name}/upd`, async (ctx:any) => {
|
||||||
// 设置头类型, 如果不设置,会直接下载该页面
|
// 设置头类型, 如果不设置,会直接下载该页面
|
||||||
ctx.type = 'application/json';
|
ctx.type = 'application/json';
|
||||||
const body = ctx.request.body;
|
const body = ctx.request.body;
|
||||||
@@ -93,7 +93,7 @@ export default class RouterFactor {
|
|||||||
db,
|
db,
|
||||||
router
|
router
|
||||||
} = this;
|
} = this;
|
||||||
router.post(`/api/${name}/add`, async (ctx) => {
|
router.post(`/api/${name}/add`, async (ctx:any) => {
|
||||||
// 设置头类型, 如果不设置,会直接下载该页面
|
// 设置头类型, 如果不设置,会直接下载该页面
|
||||||
ctx.type = 'application/json';
|
ctx.type = 'application/json';
|
||||||
const body = ctx.request.body;
|
const body = ctx.request.body;
|
||||||
@@ -116,7 +116,7 @@ export default class RouterFactor {
|
|||||||
db,
|
db,
|
||||||
router
|
router
|
||||||
} = this;
|
} = this;
|
||||||
router.post(`/api/${name}/delete`, async (ctx) => {
|
router.post(`/api/${name}/delete`, async (ctx:any) => {
|
||||||
// 设置头类型, 如果不设置,会直接下载该页面
|
// 设置头类型, 如果不设置,会直接下载该页面
|
||||||
ctx.type = 'application/json';
|
ctx.type = 'application/json';
|
||||||
const body = ctx.request.body;
|
const body = ctx.request.body;
|
||||||
+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);
|
||||||
|
// }
|
||||||
|
// })();
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
db: # 数据库配置
|
||||||
|
db: &db C:\workspace\anki_admin\QuestionMakingSystem\server\db\db.json
|
||||||
|
resourceDB: &resourceDB C:\workspace\anki_admin\QuestionMakingSystem\server\db\resourceDB.json
|
||||||
|
backupDB: &backupDB C:\workspace\anki_admin\QuestionMakingSystem\server\db\backupDB.json
|
||||||
|
logDB: &logDB C:\workspace\anki_admin\QuestionMakingSystem\server\db\logDB.json
|
||||||
|
dbBak: # 数据库备份配置
|
||||||
|
- #
|
||||||
|
original: *db
|
||||||
|
dest: F:/sourceCode/2022/compute-cms/bak/db
|
||||||
|
category: db
|
||||||
|
- #
|
||||||
|
original: *resourceDB
|
||||||
|
dest: F:/sourceCode/2022/compute-cms/bak/resourceDB
|
||||||
|
category: resourceDB
|
||||||
|
- #
|
||||||
|
original: *backupDB
|
||||||
|
dest: F:/sourceCode/2022/compute-cms/bak/backupDB
|
||||||
|
category: backupDB
|
||||||
|
- #
|
||||||
|
original: *logDB
|
||||||
|
dest: F:/sourceCode/2022/compute-cms/bak/logDB
|
||||||
|
category: logDB
|
||||||
@@ -15,7 +15,7 @@ const __dirname = dirname(fileURLToPath(
|
|||||||
import.meta.url));
|
import.meta.url));
|
||||||
|
|
||||||
|
|
||||||
const getDbPath = (dbName, defPath) => {
|
const getDbPath = (dbName:string, defPath:string) => {
|
||||||
let file = "";
|
let file = "";
|
||||||
if (ConfigHelper.config && ConfigHelper.config.db && ConfigHelper.config.db[dbName]) {
|
if (ConfigHelper.config && ConfigHelper.config.db && ConfigHelper.config.db[dbName]) {
|
||||||
file = ConfigHelper.config.path + ConfigHelper.config.db[dbName];
|
file = ConfigHelper.config.path + ConfigHelper.config.db[dbName];
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
// 备份
|
|
||||||
// export * from "./backupHelper.mjs";
|
|
||||||
// export { default as BackupHelper } from "./backupHelper.mjs";
|
|
||||||
|
|
||||||
// 配置
|
|
||||||
export * from "./ConfigHelper.mjs";
|
|
||||||
export { default as ConfigHelper } from "./ConfigHelper.mjs";
|
|
||||||
|
|
||||||
// 增删改查抽象方法
|
|
||||||
export * from "./CURDHelper.mjs";
|
|
||||||
export { default as CURDHelper } from "./CURDHelper.mjs";
|
|
||||||
|
|
||||||
// 数据库服务
|
|
||||||
export * from "./dbServer.mjs";
|
|
||||||
export { default as getDb } from "./dbServer.mjs";
|
|
||||||
|
|
||||||
// 日志服务
|
|
||||||
export * from "./LogHelper.mjs";
|
|
||||||
export { default as LogHelper } from "./LogHelper.mjs";
|
|
||||||
|
|
||||||
// 路由工厂类
|
|
||||||
export * from "./RouterFactory.mjs";
|
|
||||||
export { default as RouterFactory } from "./RouterFactory.mjs";
|
|
||||||
|
|
||||||
// 数据操作工具类
|
|
||||||
export * from "./DBHelper.mjs";
|
|
||||||
export { default as DBHelper } from "./DBHelper.mjs";
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
// 备份
|
||||||
|
// export * from "./backupHelper.mjs";
|
||||||
|
// export { default as BackupHelper } from "./backupHelper.mjs";
|
||||||
|
|
||||||
|
// 配置
|
||||||
|
export * from "./ConfigHelper.mts";
|
||||||
|
export { default as ConfigHelper } from "./ConfigHelper.mts";
|
||||||
|
|
||||||
|
// 增删改查抽象方法
|
||||||
|
export * from "./CURDHelper.mts";
|
||||||
|
export { default as CURDHelper } from "./CURDHelper.mts";
|
||||||
|
|
||||||
|
// 数据库服务
|
||||||
|
export * from "./dbServer.mts";
|
||||||
|
export { default as getDb } from "./dbServer.mts";
|
||||||
|
|
||||||
|
// 日志服务
|
||||||
|
export * from "./LogHelper.mts";
|
||||||
|
export { default as LogHelper } from "./LogHelper.mts";
|
||||||
|
|
||||||
|
// 路由工厂类
|
||||||
|
export * from "./RouterFactory.mts";
|
||||||
|
export { default as RouterFactor } from "./RouterFactory.mts";
|
||||||
|
|
||||||
|
// 数据操作工具类
|
||||||
|
export * from "./DBHelper.mts";
|
||||||
|
export { default as DBHelper } from "./DBHelper.mts";
|
||||||
|
|
||||||
|
// 服务启动类
|
||||||
|
export { default as CreateServer } from "./Server.mts";
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
export default class CURDHelper {
|
||||||
|
/**
|
||||||
|
* 读取列表数据
|
||||||
|
* @param {*} param0
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
static retrieveList({ db, name, params }: any): Promise<{
|
||||||
|
code: number;
|
||||||
|
data: any;
|
||||||
|
total: any;
|
||||||
|
}>;
|
||||||
|
/**
|
||||||
|
* 读取单条数据
|
||||||
|
* @param {*} param0
|
||||||
|
*/
|
||||||
|
static retrieveSingle({ db, name, params }: any): Promise<{
|
||||||
|
code: number;
|
||||||
|
data: {};
|
||||||
|
}>;
|
||||||
|
/**
|
||||||
|
* 修改数据
|
||||||
|
* @param {*} param0
|
||||||
|
*/
|
||||||
|
static update({ db, name, data }: any): Promise<{
|
||||||
|
code: number;
|
||||||
|
}>;
|
||||||
|
/**
|
||||||
|
* 创建数据
|
||||||
|
* @param {*} param0
|
||||||
|
*/
|
||||||
|
static create({ db, name, data }: any): Promise<{
|
||||||
|
code: number;
|
||||||
|
data: any;
|
||||||
|
}>;
|
||||||
|
/**
|
||||||
|
* 删除数据
|
||||||
|
* @param {*} param0
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
static delete({ db, name, data }: any): Promise<{
|
||||||
|
code: number;
|
||||||
|
}>;
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
/**
|
||||||
|
* 配置信息帮助类
|
||||||
|
*/
|
||||||
|
export default class ConfigHelper {
|
||||||
|
static config: any;
|
||||||
|
static initConfig(): void;
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
export default class DBHelper {
|
||||||
|
static baseDB: any;
|
||||||
|
static resourceDB: any;
|
||||||
|
static backupDB: any;
|
||||||
|
static logDB: any;
|
||||||
|
static init(): Promise<void>;
|
||||||
|
static getBackupDb(): any;
|
||||||
|
static getLogDb(): any;
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
export default class LogHelper {
|
||||||
|
static addDataLog({ tableName, type, data }: any): Promise<{
|
||||||
|
code: number;
|
||||||
|
data: any;
|
||||||
|
}>;
|
||||||
|
static modifyDataLogStatus({ id }: any): Promise<void>;
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
export default class RouterFactor {
|
||||||
|
name: string;
|
||||||
|
db: any;
|
||||||
|
router: any;
|
||||||
|
constructor({ router: _router, db: _db, name: _name }: any);
|
||||||
|
/**
|
||||||
|
* 创建列表数据路由
|
||||||
|
*/
|
||||||
|
createGetList(): void;
|
||||||
|
/**
|
||||||
|
* 创建详情路由
|
||||||
|
*/
|
||||||
|
createGetDetail(): void;
|
||||||
|
/**
|
||||||
|
* 修改数据
|
||||||
|
*/
|
||||||
|
createUpdate(): void;
|
||||||
|
/**
|
||||||
|
* 新增数据
|
||||||
|
*/
|
||||||
|
createAdd(): void;
|
||||||
|
/**
|
||||||
|
* 删除数据
|
||||||
|
*/
|
||||||
|
createDelete(): void;
|
||||||
|
creaetBaseRouter(): void;
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
export default CreateServer;
|
||||||
|
/**
|
||||||
|
* 创建服务
|
||||||
|
* port: 服务端口号
|
||||||
|
*/
|
||||||
|
declare function CreateServer(port?: number): void;
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
import { Low } from 'lowdb';
|
||||||
|
/**
|
||||||
|
* 基础数据库
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export declare const getDb: () => Promise<Low<unknown>>;
|
||||||
|
/**
|
||||||
|
* 文件资源库
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export declare const getResourceDb: () => Promise<Low<unknown>>;
|
||||||
|
/**
|
||||||
|
* 备份记录存储库
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export declare const getBackupDb: () => Promise<Low<unknown>>;
|
||||||
|
/**
|
||||||
|
* 日志存储库
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export declare const getLogDb: () => Promise<Low<unknown>>;
|
||||||
|
export default getDb;
|
||||||
+215
-174
@@ -1,44 +1,46 @@
|
|||||||
var S = Object.defineProperty;
|
import F from "yaml";
|
||||||
var j = (n, t, a) => t in n ? S(n, t, { enumerable: !0, configurable: !0, writable: !0, value: a }) : n[t] = a;
|
import B from "fs";
|
||||||
var d = (n, t, a) => j(n, typeof t != "symbol" ? t + "" : t, a);
|
import G from "cuid";
|
||||||
import k from "yaml";
|
import U from "lodash";
|
||||||
import q from "fs";
|
import w, { dirname as R, join as h } from "path";
|
||||||
import R from "cuid";
|
import { JSONFile as m, Low as D } from "lowdb";
|
||||||
import v from "lodash";
|
import { fileURLToPath as $ } from "url";
|
||||||
import { dirname as $, join as f } from "path";
|
import A from "koa";
|
||||||
import { JSONFile as w, Low as D } from "lowdb";
|
import M from "koa-router";
|
||||||
import { fileURLToPath as F } from "url";
|
import T from "koa-body";
|
||||||
class g {
|
import z from "koa-static";
|
||||||
|
import C from "koa-mount";
|
||||||
|
const j = class j {
|
||||||
static initConfig() {
|
static initConfig() {
|
||||||
this.config = k.parse(q.readFileSync("./config.yml").toString());
|
this.config = F.parse(B.readFileSync("./config.yml").toString());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
d(g, "config", null);
|
|
||||||
const b = $(F(
|
|
||||||
import.meta.url
|
|
||||||
)), L = (n, t) => {
|
|
||||||
let a = "";
|
|
||||||
return g.config && g.config.db && g.config.db[n] ? a = g.config.path + g.config.db[n] : a = t, a;
|
|
||||||
}, G = async () => {
|
|
||||||
let n = L("db", f(b, "db.json"));
|
|
||||||
const t = new w(n), a = new D(t);
|
|
||||||
return await a.read(), a;
|
|
||||||
}, U = async () => {
|
|
||||||
let n = L("resourceDB", f(b, "resourceDB.json"));
|
|
||||||
const t = new w(n), a = new D(t);
|
|
||||||
return await a.read(), a;
|
|
||||||
}, _ = async () => {
|
|
||||||
let n = L("backupDB", f(b, "backupDB.json"));
|
|
||||||
const t = new w(n), a = new D(t);
|
|
||||||
return await a.read(), a;
|
|
||||||
}, A = async () => {
|
|
||||||
let n = L("logDB", f(b, "logDB.json"));
|
|
||||||
const t = new w(n), a = new D(t);
|
|
||||||
return await a.read(), a;
|
|
||||||
};
|
};
|
||||||
class y {
|
j.config = null;
|
||||||
|
let u = j;
|
||||||
|
const b = R($(
|
||||||
|
import.meta.url
|
||||||
|
)), L = (n, a) => {
|
||||||
|
let t = "";
|
||||||
|
return u.config && u.config.db && u.config.db[n] ? t = u.config.path + u.config.db[n] : t = a, t;
|
||||||
|
}, E = async () => {
|
||||||
|
let n = L("db", h(b, "db.json"));
|
||||||
|
const a = new m(n), t = new D(a);
|
||||||
|
return await t.read(), t;
|
||||||
|
}, I = async () => {
|
||||||
|
let n = L("resourceDB", h(b, "resourceDB.json"));
|
||||||
|
const a = new m(n), t = new D(a);
|
||||||
|
return await t.read(), t;
|
||||||
|
}, O = async () => {
|
||||||
|
let n = L("backupDB", h(b, "backupDB.json"));
|
||||||
|
const a = new m(n), t = new D(a);
|
||||||
|
return await t.read(), t;
|
||||||
|
}, J = async () => {
|
||||||
|
let n = L("logDB", h(b, "logDB.json"));
|
||||||
|
const a = new m(n), t = new D(a);
|
||||||
|
return await t.read(), t;
|
||||||
|
}, y = class y {
|
||||||
static async init() {
|
static async init() {
|
||||||
this.baseDB = await G(), this.resourceDB = await U(), this.backupDB = await _(), this.logDB = await A();
|
this.baseDB = await E(), this.resourceDB = await I(), this.backupDB = await O(), this.logDB = await J();
|
||||||
}
|
}
|
||||||
static getBackupDb() {
|
static getBackupDb() {
|
||||||
return this.backupDB;
|
return this.backupDB;
|
||||||
@@ -46,22 +48,23 @@ class y {
|
|||||||
static getLogDb() {
|
static getLogDb() {
|
||||||
return this.logDB;
|
return this.logDB;
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
d(y, "baseDB", null), d(y, "resourceDB", null), d(y, "backupDB", null), d(y, "logDB", null);
|
y.baseDB = null, y.resourceDB = null, y.backupDB = null, y.logDB = null;
|
||||||
class m {
|
let g = y;
|
||||||
|
class v {
|
||||||
static async addDataLog({
|
static async addDataLog({
|
||||||
tableName: t,
|
tableName: a,
|
||||||
type: a,
|
type: t,
|
||||||
data: i
|
data: i
|
||||||
}) {
|
}) {
|
||||||
const e = await y.getLogDb();
|
const e = await g.getLogDb();
|
||||||
return p.create({
|
return p.create({
|
||||||
db: e,
|
db: e,
|
||||||
name: "dataLog",
|
name: "dataLog",
|
||||||
data: {
|
data: {
|
||||||
dataId: i.id,
|
dataId: i.id,
|
||||||
type: a,
|
type: t,
|
||||||
tableName: t,
|
tableName: a,
|
||||||
data: i,
|
data: i,
|
||||||
// 待生效
|
// 待生效
|
||||||
status: 0,
|
status: 0,
|
||||||
@@ -70,20 +73,20 @@ class m {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
static async modifyDataLogStatus({
|
static async modifyDataLogStatus({
|
||||||
id: t
|
id: a
|
||||||
}) {
|
}) {
|
||||||
const a = await y.getLogDb(), {
|
const t = await g.getLogDb(), {
|
||||||
data: i,
|
data: i,
|
||||||
code: e
|
code: e
|
||||||
} = await p.retrieveSingle({
|
} = await p.retrieveSingle({
|
||||||
db: a,
|
db: t,
|
||||||
name: "dataLog",
|
name: "dataLog",
|
||||||
params: {
|
params: {
|
||||||
id: t
|
id: a
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
e == 0 && await p.update({
|
e == 0 && await p.update({
|
||||||
db: a,
|
db: t,
|
||||||
name: "dataLog",
|
name: "dataLog",
|
||||||
data: {
|
data: {
|
||||||
...i,
|
...i,
|
||||||
@@ -93,41 +96,38 @@ class m {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
class h {
|
class S {
|
||||||
constructor({
|
constructor({
|
||||||
name: t,
|
name: a,
|
||||||
type: a
|
type: t
|
||||||
}) {
|
}) {
|
||||||
d(this, "name", "");
|
this.name = "", this.type = "", this.id = null, this.name = a, this.type = t;
|
||||||
d(this, "type", "");
|
|
||||||
d(this, "id", null);
|
|
||||||
this.name = t, this.type = a;
|
|
||||||
}
|
}
|
||||||
async addDataLog({
|
async addDataLog({
|
||||||
data: t
|
data: a
|
||||||
}) {
|
}) {
|
||||||
const {
|
const {
|
||||||
name: a,
|
name: t,
|
||||||
type: i
|
type: i
|
||||||
} = this;
|
} = this;
|
||||||
if (a != "dataLog") {
|
if (t != "dataLog") {
|
||||||
const {
|
const {
|
||||||
data: e
|
data: e
|
||||||
} = await m.addDataLog({
|
} = await v.addDataLog({
|
||||||
tableName: a,
|
tableName: t,
|
||||||
type: i,
|
type: i,
|
||||||
data: t
|
data: a
|
||||||
});
|
});
|
||||||
this.id = e.id;
|
this.id = e.id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
async modifyDataLogStatus() {
|
async modifyDataLogStatus() {
|
||||||
const {
|
const {
|
||||||
name: t,
|
name: a,
|
||||||
id: a
|
id: t
|
||||||
} = this;
|
} = this;
|
||||||
t != "dataLog" && a && await m.modifyDataLogStatus({
|
a != "dataLog" && t && await v.modifyDataLogStatus({
|
||||||
id: a
|
id: t
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -138,25 +138,25 @@ class p {
|
|||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
static async retrieveList({
|
static async retrieveList({
|
||||||
db: t,
|
db: a,
|
||||||
name: a,
|
name: t,
|
||||||
params: i
|
params: i
|
||||||
}) {
|
}) {
|
||||||
await t.read();
|
await a.read();
|
||||||
const e = t.data[a].filter((c) => {
|
const e = a.data[t].filter((c) => {
|
||||||
let l = !0;
|
let l = !0;
|
||||||
for (let r in i)
|
for (let r in i)
|
||||||
if (!["page", "pageSize"].includes(r) && (typeof c[r] == "string" ? l = c[r].indexOf(i[r]) > -1 : typeof c[r] == "number" ? l = c[r] == i[r] : c[r] instanceof Array && (l = c[r].includes(i[r])), !l))
|
if (!["page", "pageSize"].includes(r) && (typeof c[r] == "string" ? l = c[r].indexOf(i[r]) > -1 : typeof c[r] == "number" ? l = c[r] == i[r] : c[r] instanceof Array && (l = c[r].includes(i[r])), !l))
|
||||||
break;
|
break;
|
||||||
return l;
|
return l;
|
||||||
}), {
|
}), {
|
||||||
page: s,
|
page: o,
|
||||||
pageSize: o
|
pageSize: s
|
||||||
} = i;
|
} = i;
|
||||||
let u = e;
|
let d = e;
|
||||||
return s && o && (u = e.slice((s - 1) * o, s * o)), {
|
return o && s && (d = e.slice((o - 1) * s, o * s)), {
|
||||||
code: 0,
|
code: 0,
|
||||||
data: u.sort((c, l) => c.sort - l.sort) || [],
|
data: d.sort((c, l) => c.sort - l.sort) || [],
|
||||||
total: e.length
|
total: e.length
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -165,16 +165,16 @@ class p {
|
|||||||
* @param {*} param0
|
* @param {*} param0
|
||||||
*/
|
*/
|
||||||
static async retrieveSingle({
|
static async retrieveSingle({
|
||||||
db: t,
|
db: a,
|
||||||
name: a,
|
name: t,
|
||||||
params: i
|
params: i
|
||||||
}) {
|
}) {
|
||||||
await t.read();
|
await a.read();
|
||||||
const e = t.data[a], s = i;
|
const e = a.data[t], o = i;
|
||||||
let o = {};
|
let s = {};
|
||||||
return s.id && e && (o = e.find((u) => u.id == s.id)), {
|
return o.id && e && (s = e.find((d) => d.id == o.id)), {
|
||||||
code: 0,
|
code: 0,
|
||||||
data: o || {}
|
data: s || {}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@@ -182,22 +182,22 @@ class p {
|
|||||||
* @param {*} param0
|
* @param {*} param0
|
||||||
*/
|
*/
|
||||||
static async update({
|
static async update({
|
||||||
db: t,
|
db: a,
|
||||||
name: a,
|
name: t,
|
||||||
data: i
|
data: i
|
||||||
}) {
|
}) {
|
||||||
await t.read(), t.data[a] || (t.data[a] = []);
|
await a.read(), a.data[t] || (a.data[t] = []);
|
||||||
const e = t.data[a], s = i.id;
|
const e = a.data[t], o = i.id;
|
||||||
if (s && e) {
|
if (o && e) {
|
||||||
const o = e.find((c) => c.id == s);
|
const s = e.find((c) => c.id == o);
|
||||||
o && v.merge(o, i);
|
s && U.merge(s, i);
|
||||||
const u = new h({
|
const d = new S({
|
||||||
name: a,
|
name: t,
|
||||||
type: "upd"
|
type: "upd"
|
||||||
});
|
});
|
||||||
await u.addDataLog({
|
await d.addDataLog({
|
||||||
data: o
|
data: s
|
||||||
}), await t.write(), await u.modifyDataLogStatus();
|
}), await a.write(), await d.modifyDataLogStatus();
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
code: 0
|
code: 0
|
||||||
@@ -208,20 +208,20 @@ class p {
|
|||||||
* @param {*} param0
|
* @param {*} param0
|
||||||
*/
|
*/
|
||||||
static async create({
|
static async create({
|
||||||
db: t,
|
db: a,
|
||||||
name: a,
|
name: t,
|
||||||
data: i
|
data: i
|
||||||
}) {
|
}) {
|
||||||
await t.read(), t.data[a] || (t.data[a] = []);
|
await a.read(), a.data[t] || (a.data[t] = []);
|
||||||
const e = t.data[a];
|
const e = a.data[t];
|
||||||
i.id = R(), i.createTime = /* @__PURE__ */ new Date(), e.push(i);
|
i.id = G(), i.createTime = /* @__PURE__ */ new Date(), e.push(i);
|
||||||
const s = new h({
|
const o = new S({
|
||||||
name: a,
|
name: t,
|
||||||
type: "add"
|
type: "add"
|
||||||
});
|
});
|
||||||
return await s.addDataLog({
|
return await o.addDataLog({
|
||||||
data: i
|
data: i
|
||||||
}), await t.write(), await s.modifyDataLogStatus(), {
|
}), await a.write(), await o.modifyDataLogStatus(), {
|
||||||
code: 0,
|
code: 0,
|
||||||
data: i
|
data: i
|
||||||
};
|
};
|
||||||
@@ -232,61 +232,58 @@ class p {
|
|||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
static async delete({
|
static async delete({
|
||||||
db: t,
|
db: a,
|
||||||
name: a,
|
name: t,
|
||||||
data: i
|
data: i
|
||||||
}) {
|
}) {
|
||||||
await t.read(), t.data[a] || (t.data[a] = []);
|
await a.read(), a.data[t] || (a.data[t] = []);
|
||||||
const e = t.data[a], s = i.ids;
|
const e = a.data[t], o = i.ids;
|
||||||
if (s.length > 0 && e) {
|
if (o.length > 0 && e) {
|
||||||
let o = null;
|
let s = null;
|
||||||
const u = [];
|
const d = [];
|
||||||
for (let l = 0; l < s.length; l++) {
|
for (let l = 0; l < o.length; l++) {
|
||||||
o = s[l];
|
s = o[l];
|
||||||
const r = e.findIndex((B) => B.id == o);
|
const r = e.findIndex((f) => f.id == s);
|
||||||
r != -1 && (u.push(e[r]), e.splice(r, 1));
|
r != -1 && (d.push(e[r]), e.splice(r, 1));
|
||||||
}
|
}
|
||||||
const c = new h({
|
const c = new S({
|
||||||
name: a,
|
name: t,
|
||||||
type: "del"
|
type: "del"
|
||||||
});
|
});
|
||||||
await c.addDataLog({
|
await c.addDataLog({
|
||||||
data: u
|
data: d
|
||||||
}), await t.write(), await c.modifyDataLogStatus();
|
}), await a.write(), await c.modifyDataLogStatus();
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
code: 0
|
code: 0
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
class M {
|
class et {
|
||||||
constructor({
|
constructor({
|
||||||
router: t,
|
router: a,
|
||||||
db: a,
|
db: t,
|
||||||
name: i
|
name: i
|
||||||
}) {
|
}) {
|
||||||
d(this, "name", "");
|
this.name = "", this.db = null, this.router = null, this.router = a, this.db = t, this.name = i;
|
||||||
d(this, "db", null);
|
|
||||||
d(this, "router", null);
|
|
||||||
this.router = t, this.db = a, this.name = i;
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 创建列表数据路由
|
* 创建列表数据路由
|
||||||
*/
|
*/
|
||||||
createGetList() {
|
createGetList() {
|
||||||
const {
|
const {
|
||||||
name: t,
|
name: a,
|
||||||
db: a,
|
db: t,
|
||||||
router: i
|
router: i
|
||||||
} = this;
|
} = this;
|
||||||
i.post(`/api/${t}/list`, async (e) => {
|
i.post(`/api/${a}/list`, async (e) => {
|
||||||
e.type = "application/json";
|
e.type = "application/json";
|
||||||
const s = e.request.body, o = await p.retrieveList({
|
const o = e.request.body, s = await p.retrieveList({
|
||||||
db: a,
|
db: t,
|
||||||
name: t,
|
name: a,
|
||||||
params: s
|
params: o
|
||||||
});
|
});
|
||||||
e.body = o;
|
e.body = s;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@@ -294,18 +291,18 @@ class M {
|
|||||||
*/
|
*/
|
||||||
createGetDetail() {
|
createGetDetail() {
|
||||||
const {
|
const {
|
||||||
name: t,
|
name: a,
|
||||||
db: a,
|
db: t,
|
||||||
router: i
|
router: i
|
||||||
} = this;
|
} = this;
|
||||||
i.get(`/api/${t}`, async (e) => {
|
i.get(`/api/${a}`, async (e) => {
|
||||||
e.type = "application/json";
|
e.type = "application/json";
|
||||||
const s = e.request.query, o = await p.retrieveSingle({
|
const o = e.request.query, s = await p.retrieveSingle({
|
||||||
db: a,
|
db: t,
|
||||||
name: t,
|
name: a,
|
||||||
params: s
|
params: o
|
||||||
});
|
});
|
||||||
e.body = o;
|
e.body = s;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@@ -313,18 +310,18 @@ class M {
|
|||||||
*/
|
*/
|
||||||
createUpdate() {
|
createUpdate() {
|
||||||
const {
|
const {
|
||||||
name: t,
|
name: a,
|
||||||
db: a,
|
db: t,
|
||||||
router: i
|
router: i
|
||||||
} = this;
|
} = this;
|
||||||
i.post(`/api/${t}/upd`, async (e) => {
|
i.post(`/api/${a}/upd`, async (e) => {
|
||||||
e.type = "application/json";
|
e.type = "application/json";
|
||||||
const s = e.request.body, o = await p.update({
|
const o = e.request.body, s = await p.update({
|
||||||
db: a,
|
db: t,
|
||||||
name: t,
|
name: a,
|
||||||
data: s
|
data: o
|
||||||
});
|
});
|
||||||
e.body = o;
|
e.body = s;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@@ -332,18 +329,18 @@ class M {
|
|||||||
*/
|
*/
|
||||||
createAdd() {
|
createAdd() {
|
||||||
const {
|
const {
|
||||||
name: t,
|
name: a,
|
||||||
db: a,
|
db: t,
|
||||||
router: i
|
router: i
|
||||||
} = this;
|
} = this;
|
||||||
i.post(`/api/${t}/add`, async (e) => {
|
i.post(`/api/${a}/add`, async (e) => {
|
||||||
e.type = "application/json";
|
e.type = "application/json";
|
||||||
const s = e.request.body, o = await p.create({
|
const o = e.request.body, s = await p.create({
|
||||||
db: a,
|
db: t,
|
||||||
name: t,
|
name: a,
|
||||||
data: s
|
data: o
|
||||||
});
|
});
|
||||||
e.body = o;
|
e.body = s;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@@ -351,32 +348,76 @@ class M {
|
|||||||
*/
|
*/
|
||||||
createDelete() {
|
createDelete() {
|
||||||
const {
|
const {
|
||||||
name: t,
|
name: a,
|
||||||
db: a,
|
db: t,
|
||||||
router: i
|
router: i
|
||||||
} = this;
|
} = this;
|
||||||
i.post(`/api/${t}/delete`, async (e) => {
|
i.post(`/api/${a}/delete`, async (e) => {
|
||||||
e.type = "application/json";
|
e.type = "application/json";
|
||||||
const s = e.request.body, o = await p.delete({
|
const o = e.request.body, s = await p.delete({
|
||||||
db: a,
|
db: t,
|
||||||
name: t,
|
name: a,
|
||||||
data: s
|
data: o
|
||||||
});
|
});
|
||||||
e.body = o;
|
e.body = s;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
creaetBaseRouter() {
|
creaetBaseRouter() {
|
||||||
this.createGetList(), this.createGetDetail(), this.createAdd(), this.createUpdate(), this.createDelete();
|
this.createGetList(), this.createGetDetail(), this.createAdd(), this.createUpdate(), this.createDelete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
const q = R($(
|
||||||
|
import.meta.url
|
||||||
|
));
|
||||||
|
u.initConfig();
|
||||||
|
(async () => await g.init())();
|
||||||
|
function it(n = 4873) {
|
||||||
|
const a = new M(), t = new A();
|
||||||
|
t.use(T()), t.use(
|
||||||
|
C("/resource/static", z(
|
||||||
|
w.join(q, "./static"),
|
||||||
|
{}
|
||||||
|
))
|
||||||
|
), t.use(a.routes()), t.use(a.allowedMethods());
|
||||||
|
const e = (d) => {
|
||||||
|
B.readdir(d, async (c, l) => {
|
||||||
|
if (c) {
|
||||||
|
console.error("Error reading directory:", c);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (const r of l)
|
||||||
|
try {
|
||||||
|
const f = w.join(d, r), k = await B.statSync(f);
|
||||||
|
if (k.isDirectory())
|
||||||
|
await e(f);
|
||||||
|
else if (k.isFile()) {
|
||||||
|
const P = w.join(d, r);
|
||||||
|
(await import("./" + w.relative(q, P))).default(a);
|
||||||
|
}
|
||||||
|
} catch (f) {
|
||||||
|
console.error(`Error importing ${r}:`, f);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
(async () => await e("./routers"))();
|
||||||
|
let o = null;
|
||||||
|
(() => {
|
||||||
|
o = t.listen(n, () => {
|
||||||
|
console.log("server is listen in ", n);
|
||||||
|
}), o.on("close", (d, c) => {
|
||||||
|
o = null, console.log("server is close");
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
}
|
||||||
export {
|
export {
|
||||||
p as CURDHelper,
|
p as CURDHelper,
|
||||||
g as ConfigHelper,
|
u as ConfigHelper,
|
||||||
y as DBHelper,
|
it as CreateServer,
|
||||||
m as LogHelper,
|
g as DBHelper,
|
||||||
M as RouterFactory,
|
v as LogHelper,
|
||||||
_ as getBackupDb,
|
et as RouterFactor,
|
||||||
G as getDb,
|
O as getBackupDb,
|
||||||
A as getLogDb,
|
E as getDb,
|
||||||
U as getResourceDb
|
J as getLogDb,
|
||||||
|
I as getResourceDb
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
export * from './ConfigHelper.mts';
|
||||||
|
export { default as ConfigHelper } from './ConfigHelper.mts';
|
||||||
|
export * from './CURDHelper.mts';
|
||||||
|
export { default as CURDHelper } from './CURDHelper.mts';
|
||||||
|
export * from './dbServer.mts';
|
||||||
|
export { default as getDb } from './dbServer.mts';
|
||||||
|
export * from './LogHelper.mts';
|
||||||
|
export { default as LogHelper } from './LogHelper.mts';
|
||||||
|
export * from './RouterFactory.mts';
|
||||||
|
export { default as RouterFactor } from './RouterFactory.mts';
|
||||||
|
export * from './DBHelper.mts';
|
||||||
|
export { default as DBHelper } from './DBHelper.mts';
|
||||||
|
export { default as CreateServer } from './Server.mts';
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export default function sleep(timeout: number): Promise<unknown>;
|
||||||
+9
-2
@@ -2,9 +2,10 @@
|
|||||||
"name": "funjia-server",
|
"name": "funjia-server",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "lib/funjia-server.mjs",
|
||||||
|
"types": "lib/index.d.mts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build":"vite build",
|
"build": "vite build",
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
},
|
},
|
||||||
"author": "",
|
"author": "",
|
||||||
@@ -24,9 +25,15 @@
|
|||||||
"multer": "^1.4.5-lts.1",
|
"multer": "^1.4.5-lts.1",
|
||||||
"node-cron": "^3.0.1",
|
"node-cron": "^3.0.1",
|
||||||
"uuid": "^8.3.2",
|
"uuid": "^8.3.2",
|
||||||
|
"vite-plugin-dts": "^4.5.0",
|
||||||
"yaml": "^2.1.1"
|
"yaml": "^2.1.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@types/koa": "^2.15.0",
|
||||||
|
"@types/koa-mount": "^4.0.5",
|
||||||
|
"@types/koa-router": "^7.4.8",
|
||||||
|
"@types/koa-static": "^4.0.4",
|
||||||
|
"@types/lodash": "^4.17.14",
|
||||||
"vite": "^6.0.7"
|
"vite": "^6.0.7"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
export default async function sleep(timeout) {
|
export default async function sleep(timeout:number) {
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
resolve(true);
|
resolve(true);
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
// import { BackupHelper } from "./index.mjs";
|
import { CreateServer,CURDHelper} from "./lib/index.mjs";
|
||||||
|
|
||||||
|
CreateServer()
|
||||||
import { } from "./lib/funjia-server.mjs";
|
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "es2018",
|
||||||
|
"module": "nodenext",
|
||||||
|
"moduleResolution": "nodenext",
|
||||||
|
"declaration": true,
|
||||||
|
"outDir": "dist",
|
||||||
|
"strict": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"forceConsistentCasingInFileNames": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"noEmit": true,
|
||||||
|
"allowImportingTsExtensions": true
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"*.mts"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"node_modules"
|
||||||
|
]
|
||||||
|
}
|
||||||
Vendored
+7
@@ -0,0 +1,7 @@
|
|||||||
|
declare namespace Server {
|
||||||
|
/**
|
||||||
|
* 创建服务
|
||||||
|
* @param port 端口号 默认:4873
|
||||||
|
*/
|
||||||
|
export function CreateServer(port: number) { }
|
||||||
|
}
|
||||||
+11
-5
@@ -1,25 +1,31 @@
|
|||||||
import { defineConfig } from 'vite';
|
import { defineConfig } from 'vite';
|
||||||
|
import dts from 'vite-plugin-dts';
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
build: {
|
build: {
|
||||||
lib: {
|
lib: {
|
||||||
entry: './index.mjs', // 你的库的入口文件,这里假设是 src/main.mjs
|
entry: './index.mts', // 你的库的入口文件,这里假设是 src/main.mjs
|
||||||
name: 'funjia-server', // 库的全局名称,将在浏览器环境中使用
|
name: 'funjia-server', // 库的全局名称,将在浏览器环境中使用
|
||||||
formats: ['es'], // 输出的模块格式,这里包含 ES 模块和 UMD 模块
|
formats: ['es'], // 输出的模块格式,这里包含 ES 模块和 UMD 模块
|
||||||
// fileName: (format) => `your-library-name.${format}.js` // 输出的文件名,根据不同的格式生成不同的文件名
|
// fileName: (format) => `your-library-name.${format}.js` // 输出的文件名,根据不同的格式生成不同的文件名
|
||||||
},
|
},
|
||||||
rollupOptions: {
|
rollupOptions: {
|
||||||
// 确保不包含 Node.js 特定的模块,避免将 Node.js 模块错误地打包到浏览器代码中
|
// 确保不包含 Node.js 特定的模块,避免将 Node.js 模块错误地打包到浏览器代码中
|
||||||
external: ['child_process','fs', 'path','url','node','node-cron','cuid','dayjs','koa','koa-body',
|
external: ['child_process', 'fs', 'path', 'url', 'node', 'node-cron', 'cuid', 'dayjs', 'koa', 'koa-body',
|
||||||
'koa-mount','koa-router','koa-static','lodash','lowdb','multer','uuid','yaml','@koa/multer','@types/yaml'],
|
'koa-mount', 'koa-router', 'koa-static', 'lodash', 'lowdb', 'multer', 'uuid', 'yaml', '@koa/multer', '@types/yaml'],
|
||||||
output: {
|
output: {
|
||||||
exports: 'named',
|
exports: 'named',
|
||||||
// 在 Node.js 环境中不需要全局变量,可将此设置为 undefined
|
// 在 Node.js 环境中不需要全局变量,可将此设置为 undefined
|
||||||
globals: undefined
|
globals: undefined
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 构建为 Node.js 库时,将输出目录设置为 lib 而不是 dist,可根据需要修改
|
// 构建为 Node.js 库时,将输出目录设置为 lib 而不是 dist,可根据需要修改
|
||||||
outDir: 'lib'
|
outDir: 'lib'
|
||||||
|
|
||||||
}
|
},
|
||||||
|
plugins: [
|
||||||
|
dts({
|
||||||
|
insertTypesEntry: true,
|
||||||
|
}),
|
||||||
|
],
|
||||||
});
|
});
|
||||||
Reference in New Issue
Block a user