import path from 'path'; import Koa, { Context, DefaultState } from 'koa'; // 路由 import router from './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 koaProxy from 'koa-proxies'; import config from '@config'; import redisMiddleware from './middlewares/redis'; import limitMiddleware from './middlewares/limit'; import logsMiddleware from './middlewares/logs'; import responseMiddleware from './middlewares/response'; import sessionMiddleware from './middlewares/session'; // import authMiddleware from './middlewares/auth'; import localDbMiddleware from './middlewares/localDb'; import { loggerInstance } from '@utils/logger'; const app = new Koa(); // 为了获取到真实的ip // https://github.com/koajs/koa/issues/599 app.proxy = true; /* 中间件 */ // 安全防护 app.use(helmet()); // 静态资源 app.use(koaStatic(path.join(__dirname, config.staticPath))) // 返回体格式 app.use(responseMiddleware()); // post params解析 app.use(bodyParser()); // 本地嵌入式数据库 app.use(localDbMiddleware()) // 日志 app.use(logsMiddleware()); // redis app.use(redisMiddleware()); // 限流 app.use(limitMiddleware()); // session app.use(sessionMiddleware(app)) // auth // app.use(authMiddleware()) // 请求转发 app.use(koaProxy('/proxy', { target: 'https://demo.com', changeOrigin: true, logs: true, rewrite: path => path.replace(/^\/proxy(\/|\/\w+)?$/, '/') })) app.on('error', (err, ctx: Context) => { ctx.$response(err, 'error', false); const errMsg: string = err.message || '服务出错'; console.log(errMsg); console.log(ctx); loggerInstance(ctx).error(errMsg) }); // 注册路由 app.use(router.routes()).use(router.allowedMethods()); const port = config.port; app.listen(port, () => { consola.success(`server is started at: http://localhost:${port}`) });