This commit is contained in:
艾贤凌
2026-03-16 12:05:55 +08:00
parent af3a7c83e8
commit 6d4a72161f
33 changed files with 5671 additions and 178 deletions

View File

@@ -1,34 +1,83 @@
import Koa from 'koa';
import Router from 'koa-router';
import config from "../config/index.js"
import koaStatic from 'koa-static';
import registry from "./registry.js";
import * as log4js from "../log4js.js";
import auth from "./auth.js";
import login from "./login.js";
import Koa from 'koa'
import Router from 'koa-router'
import bodyParser from 'koa-bodyparser'
import koaStatic from 'koa-static'
import config from '../config/index.js'
import * as log4js from '../log4js.js'
import auth from './auth.js'
import login from './login.js'
import registry from './registry.js'
import linuxdo from './linuxdo.js'
import errorHandler from './middleware/errorHandler.js'
import ipFilter from './middleware/ipFilter.js'
import rateLimiter from './middleware/rateLimiter.js'
const app = new Koa();
const router = new Router();
const app = new Koa()
const router = new Router()
// 简单的路由示例
// ─── 基础路由 ────────────────────────────────────────────────────────────────
router.get('/', (ctx) => {
ctx.body = {message: 'Hello from Koa server!'};
});
ctx.body = { message: 'Chuanqi Server Running!' }
})
router.get('/api/config', (ctx) => {
ctx.body = {data: config}
ctx.body = {
data: {
gameName: config.game.name,
gameDescription: config.game.description,
codeOpen: config.code.open,
regCodeOpen: config.code.regCodeOpen,
regOpen: config.account.regOpen,
loginOpen: config.account.loginOpen,
linuxdoAuthorizeUrl: `/api/linuxdo/authorize`,
// 提现相关
withdrawRatio: config.withdraw.ratio,
withdrawMinOnce: config.withdraw.minOnce,
currencyName: config.currency.list[config.withdraw.type] || '货币',
}
}
})
app.proxy = true;
// ─── 中间件 ──────────────────────────────────────────────────────────────────
app.proxy = true
// 1. 统一错误处理(最外层,捕获所有异常)
app.use(errorHandler)
// 2. 请求日志
app.use(async (ctx, next) => {
log4js.koa.debug(`${ctx.method} ${ctx.path}`)
await next()
})
// 3. IP 黑名单过滤
app.use(ipFilter)
// 4. 请求限流(防暴力破解)
app.use(rateLimiter)
// 5. body 解析
app.use(bodyParser({
enableTypes: ['json', 'form'],
formLimit: '10mb',
jsonLimit: '10mb',
}))
// 6. JWT 鉴权
app.use(auth)
app.use(router.routes());
app.use(registry)
// 路由挂载
app.use(router.routes())
app.use(router.allowedMethods())
app.use(login)
app.use(router.allowedMethods());
app.use(registry)
app.use(linuxdo)
// 静态文件(部署时前端 dist 挂到 /www
app.use(koaStatic('/www'))
const PORT = process.env.PORT || 3001;
// ─── 启动 ────────────────────────────────────────────────────────────────────
const PORT = process.env.PORT || 3001
app.listen(PORT, () => {
log4js.koa.info(`Koa server is running on port ${PORT}`);
});
log4js.koa.info(`🚀 Koa server running on port ${PORT}`)
})