Egg.js 搭建笔记

Egg.js 搭建笔记_第1张图片

介绍

Egg.js 为企业级框架和应用而生。基于Koa开发封装,性能优异,内置多进程管理,具有高扩展性,且提供了基于Egg定制上层框架的能力,帮助开发团队降低了开发维护成本。

初始化项目 

npm init egg --type=simple 

安装依赖

npm i 

启动项目 

npm run dev 

目录约定规范

Egg.js 搭建笔记_第2张图片

如上,由框架约定的目录:

  • app/router.js 用于配置 URL 路由规则。
  • app/controller/** 用于解析用户的输入,处理后返回相应的结果。
  • app/service/** 用于编写业务逻辑层。
  • app/middleware/** 用于编写中间件。
  • app/public/** 用于放置静态资源。
  • app/extend/** 用于框架的扩展。
  • config/config.{env}.js 用于编写配置文件。
  • config/plugin.js 用于配置需要加载的插件。
  • test/** 用于单元测试。
  • app.js 和 agent.js 用于自定义启动时的初始化工作。

内置插件约定的目录:

  • app/public/** 用于放置静态资源。
  • app/schedule/** 用于定时任务。

若需自定义自己的目录规范

  • app/view/** 用于放置模板文件。
  • app/model/** 用于放置领域模型。

配置 

module.exports = appInfo => {

  /**
   * built-in config
   * @type {Egg.EggAppConfig}
   **/

  const config = exports = {
    // 文件上传
    // https://eggjs.org/zh-cn/basics/controller.html#获取上传的文件
    multipart: {
      mode: 'file',
      fileSize: '50mb', // 接收文件大小
      whitelist: [  // 允许接收的文件类型
        '.png',
        '.jpg'
      ],
    }
  };

  config.wxApp = {
    one: {    
      appid: '',
      secret: '',
    },
  };


  // use for cookie sign key, should change to your own and keep security
  config.keys = appInfo.name + '_1617193772184_9015';

  config.jwt = {
    secret: '',
  };

  config.security = {
    csrf: {
      enable: false,
      ignoreJSON: true
    },
    //允许8080访问接口
    domainWhiteList: ['http://localhost:8080']
  };
  //跨域配置
  config.cors = {
    origin:'*',
    allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS'
  };

  config.sequelize = {
    dialect: 'mysql',
    port: '3306',

    // 本地测试数据库
    host: '',
    database: '',
    username: '',
    password: '',

    pool: {
      max: 5,
      idle: 30000,
      acquire: 60000,
    },
    dialectOptions: {
      charset: 'utf8mb4',
      collate: 'utf8mb4_unicode_ci',
    },
    timezone: '+08:00',
    define: {
      freezeTableName: true,
      timestamps: false,
    },
  };
  
  // add your user config here
  const userConfig = {
    // myAppName: 'egg',
  };

  config.view = {
    mapping: {
      '.html': 'ejs',
    },
  };

  config.cluster = {
    listen: {
      path: '',
      port: 7001,
      hostname: '127.0.0.1',
    }
}
  return {
    ...config,
    ...userConfig,
  };
};

Router 

router.get(path, controller); 

示例

module.exports = app => {
  const { router, controller } = app;
  router.get('/userList', controller.list.UserListIndex);  // 用户列表
};

Controller

Controller 可以调用任何一个 Service 上的任何方法

 示例

const Controller = require('egg').Controller;

class ListController extends Controller {
    // 查看所有用户
    async UserListIndex() {
        const { ctx } = this;
        const userListData = await this.service.list.getUserList();
        if (userListData) {
            ctx.body = {
                code: 0,
                message: '成功',
                data: userListData,
            }
        } else {
            ctx.body = {
                code: 1,
                message: '失败',
            }
        }
    };
}

module.exports = ListController;

在 Controller 中通过 this.ctx 可以获取上下文对象,方便获取和设置相关参数,例如:        

ctx.query:URL 中的请求参数(忽略重复 key)
ctx.quries:URL 中的请求参数(重复的 key 被放入数组中)
ctx.params:Router 上的命名参数
ctx.request.body:HTTP 请求体中的内容
ctx.request.files:前端上传的文件对象
ctx.getFileStream():获取上传的文件流
ctx.multipart():获取 multipart/form-data 数据
ctx.cookies:读取和设置 cookie
ctx.session:读取和设置 session
ctx.service.xxx:获取指定 service 对象的实例(懒加载)
ctx.status:设置状态码
ctx.body:设置响应体
ctx.set:设置响应头
ctx.redirect(url):重定向
ctx.render(template):渲染模板

Service

Service 文件必须放在 app/service 目录,支持多级目录,访问的时候需要通过目录名级联访问


const Service = require('egg').Service;

class ListService extends Service {
    // 引入表
    MODEL = this.app.model.User;
    User = this.MODEL.User;
    Role = this.MODEL.Role;

    // 查询所有用户信息
    async getUserList() {
        return await this.User.findAll({
            include: {
                model: this.Role,
            }
        });
    };
}

module.exports = ListService;

 引入插件 

示例

npm i  cors  --save

然后在 config/plugin.js 中启用该插件

module.exports = {
  cors: {
    enable: true,
    package: 'egg-cors',
  }
};

你可能感兴趣的:(node.js,前端)