index.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /**
  2. * 封装koa mvc基础架构初始化工作
  3. */
  4. const path = require('path')
  5. const Koa = require('koa');
  6. const { initConfig, initController, initService, initModel, initRouter, initMiddleware, initExtend, initSchedule } = require('./loader');
  7. const views = require("koa-views");
  8. class Application {
  9. constructor() {
  10. this.$app = new Koa();
  11. // 注册默认内置中间件
  12. this.initDefaultMiddleware();
  13. // 初始化config
  14. this.$config = initConfig(this);
  15. // 初始化controller
  16. this.$controller = initController(this);
  17. // 初始化service
  18. this.$service = initService(this);
  19. // 初始化middleware
  20. this.$middleware = initMiddleware(this);
  21. // 初始化model
  22. this.$model = initModel(this)
  23. // 初始化router
  24. this.$router = initRouter(this);
  25. // 初始化扩展
  26. initExtend(this);
  27. // 初始化定时任务schedule
  28. initSchedule(this)
  29. // 将ctx注入到app上
  30. this.$app.use(async(ctx, next) => {
  31. this.ctx = ctx;
  32. await next()
  33. })
  34. this.$app.use(this.$router.routes());
  35. }
  36. // 设置内置中间件
  37. initDefaultMiddleware() {
  38. const koaStatic = require('koa-static');
  39. const koaBody = require('koa-body');
  40. const cors = require('koa2-cors');
  41. const views = require('koa-views');
  42. // 配置静态web
  43. this.$app.use(koaStatic(path.resolve(__dirname, '../public')), {
  44. gzip: true,
  45. setHeaders: function(res) {
  46. res.header('Access-Control-Allow-Origin', '*')
  47. }
  48. });
  49. //跨域处理
  50. this.$app.use(cors());
  51. // body接口数据处理
  52. this.$app.use(koaBody({
  53. multipart: true,
  54. formidable: {
  55. maxFileSize: 3000 * 1024 * 1024 // 设置上传文件大小最大限制,默认30M
  56. }
  57. }));
  58. //配置需要渲染的文件路径及文件后缀
  59. this.$app.use(views(path.join(__dirname, '../views'), {
  60. extension: 'ejs'
  61. }))
  62. }
  63. // 启动服务
  64. start(port) {
  65. this.$app.listen(port, () => {
  66. console.log('API服务已启动...http://localhost:' + port);
  67. });
  68. }
  69. }
  70. module.exports = Application;