index.js 2.2 KB

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