import Koa from 'koa' import log from './utils/log' import serve from 'koa-static' import bodyPaser from 'koa-bodyparser' import {staticRoot} from './utils/staticResourcePath' import router from './routers' import { RouterContext } from 'koa-router'; import assignGlobalFnToCtx from './core/assignGlobalFnToCtx' const app = assignGlobalFnToCtx(new Koa()) // 记录下请求时间 app.use(async (ctx: RouterContext, next: any) => { const startTime = Date.now(); await next() ctx.set('x-responseTime', (Date.now() - startTime).toString()) }) app.use(bodyPaser()) app.use(serve(staticRoot)) app.use(async (ctx: RouterContext, next) => { log.success('active:', ctx.url) await next() }) app.use(async (ctx: RouterContext, next) => { try { await next(); } catch (err) { ctx.status = err.status || 500; ctx.body = err; ctx.app.emit('error', err, ctx); } }); app.use(router.routes()) export default function start() { const port = app.context.legoOption.port return app.listen(port, () => { log.success(`app started: http://localhost:${port}`); }); } // EXEC_NOW 标志是否立即执行 if (process.env.EXEC_NOW === 'true') { start() }