Egg.js的基本使用

文章目录

    • Egg是什么?
    • 快速安装
    • 配置插件
    • MVC

Egg是什么?

Egg是基于Koa进一步封装的一个企业级框架。

快速安装

 mkdir egg-example && cd egg-example
 npm init egg --type=simple
 npm i

配置插件

  1. egg-mysql,jwt, egg-cors
// /config/plugin.js
exports.mysql = {
     
  enable: true,
  package: 'egg-mysql',
};
exports.cors = {
     
  enable: true,
  package: 'egg-cors',
};
exports.jwt = {
     
  enable: true,
  package: 'egg-jwt',
};

// 配置端口号
config.cluster = {
     
  listen: {
     
    path: '',
    port: 3450,
    hostname: '0.0.0.0',
  },
};
// mysql 配置
config.mysql = {
     
  // database configuration
  client: {
     
    // host
    host: 'localhost',
    // port
    port: '3306',
    // username
    user: 'xxx',
    // password
    password: 'xxx',
    // database
    database: 'xxx',
  },
  // load into app, default is open
  app: true,
  // load into agent, default is close
  agent: false,
};
// 跨域
config.security = {
     
  csrf: {
     
    enable: false,
  },
  domainWhiteList: [ '*' ],
};
// 跨域
config.cors = {
     
  origin: '*',
  allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS',
};
// token
config.jwt = {
     
  secret: 'xxx',
};

MVC

  • model 模型 和数据打交道(查询数据库,请求数据),存放于service目录中
  • Controller控制器 负责处理业务逻辑存放于controller目录。
  • view 视图模板页面的展示,但是前后端分离不需要模板页面,需要我们提供接口,router.js用于存放接口

在controller中我们使用 this.ctx获取一些内容,例如:

  • get请求使用 this.ctx.query
  • post 请求使用this.ctx.request.body
  • 调用service中的方法使用 await this.ctx.service.xxx.xxx()
  • 获取jwt 生成的token内容this.ctx.state.xxx

生成token

const token = this.app.jwt.sign({
     
    xx: xxx
  }, this.app.config.jwt.secret);

在Service层中我们最常用的操作数据库的方法:

  • await this.app.mysql.query(sql) 写sql进行操作,万能方法,但是要小心sql注入。
  • C await this.app.mysql.insert(‘table’, { id:xx,a:xx }) 增加
  • R await this.app.mysql.get(‘table’, { id:1}) 查询一条。返回一个对象
const results = await this.app.mysql.select('table', {
      // 搜索 post 表
  where: {
      status: 'draft', author: ['author1', 'author2'] }, // WHERE 条件
  columns: ['author', 'title'], // 要查询的表字段
  orders: [['created_at','desc'], ['id','desc']], // 排序方式
  limit: 10, // 返回数据量
  offset: 0, // 数据偏移量
});

查询多条,返回数组

  • U await this.app.mysql.update(‘table’, { id:1,xx:xx}) // 修改数据,将会根据主键 ID 查找,并更新
    如果主键是自定义的 ID 名称,如 custom_id,则需要在 where 里面配置
  • D await this.app.mysql.delete(‘table’, { id:1 })

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