123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- 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<DefaultState, Context>();
- // 为了获取到真实的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}`)
- });
|