import path from 'path'; import Koa, { Context, DefaultState } from 'koa'; import Router from 'koa-router'; // 美化控制台 import consola from 'consola/dist/consola'; // 解析post的body体 import bodyParser from 'koa-bodyparser'; // 部分安全相关 import helmet from 'koa-helmet'; // 静态服务 import koaStatic from 'koa-static' import controllers from './controllers'; import config from './config'; import redisMiddleware from './middlewares/redis'; import limitMiddleware from './middlewares/limit'; import logsMiddleware from './middlewares/logs'; import responseMiddleware from './middlewares/response'; const app = new Koa(); /* 中间件 */ // 安全防护 app.use(helmet()); // 静态资源 app.use(koaStatic(path.join(__dirname, config.staticPath))) // post params解析 app.use(bodyParser()); // 日志 app.use(logsMiddleware()); // redis app.use(redisMiddleware()); // 限流 app.use(limitMiddleware()); // 返回体格式 app.use(responseMiddleware()); app.on('error', (err, ctx: Context) => { ctx.$response(err, 'error', false); }); // api 路由 const apiRouter = new Router(); apiRouter.get('/code', controllers.code); // 主路由 const router = new Router(); router.get('/', controllers.home); // api路由以/api前缀 router.use('/api', apiRouter.routes(), apiRouter.allowedMethods()); app.use(router.routes()).use(router.allowedMethods()); const port = config.port; app.listen(port, () => { consola.success(`server is started at: http://localhost:${port}`) });