egg-mysql用法详解

1. 整体流程

下面是使用egg-mysql的整体流程:

步骤 描述
1 安装egg-mysql插件
2 在config/config.default.js中配置mysql插件
3 创建Model文件
4 编写业务逻辑代码

2. 安装egg-mysql插件

在开始之前,我们需要先安装egg-mysql插件。打开终端,进入你的项目根目录,执行下面的命令:

npm install egg-mysql --save

安装完成后,我们可以在package.json文件的dependencies中看到egg-mysql插件已被添加。

3. 配置mysql插件

在配置文件config/config.default.js中,我们需要进行mysql插件的配置。找到该文件,添加如下代码:

exports.mysql = {
  // 单数据库信息配置
  client: {
    // host
    host: 'localhost',
    // 端口号
    port: '3306',
    // 用户名
    user: 'root',
    // 密码
    password: '123456',
    // 数据库名
    database: 'test',
  },
  // 是否加载到 app 上,默认开启
  app: true,
  // 是否加载到 agent 上,默认关闭
  agent: false,
};

在上述代码中,我们配置了mysql连接的相关信息,包括主机名、端口号、用户名、密码和数据库名。根据实际情况,你需要修改这些参数。

4. 创建Model文件

在egg.js中,我们可以通过Model来操作数据库。Model负责与数据库进行交互,包括数据的查询、插入、更新和删除等操作。下面我们来创建一个Model文件。

在app/model目录下,创建一个名为user.js的文件。在该文件中,我们可以定义与user表相关的数据操作方法。

module.exports = app => {
  const { STRING, INTEGER, DATE } = app.Sequelize;

  const User = app.model.define('user', {
    id: { type: INTEGER, primaryKey: true, autoIncrement: true },
    name: STRING(30),
    age: INTEGER,
    created_at: DATE,
    updated_at: DATE,
  });

  return User;
};

上述代码中,我们使用app.model.define来定义一个与user表对应的Model。在Model中,我们可以设置表的字段以及字段的类型。此外,我们还需要设置主键、自增属性和时间字段。

5. 编写业务逻辑代码

在上一步中,我们创建了Model文件。接下来,我们可以在controller中编写业务逻辑代码,使用Model对数据库进行操作。

在app/controller目录中,创建一个名为user.js的文件。在该文件中,我们可以定义与用户相关的接口。

class UserController extends app.Controller {
  async index() {
    const { ctx } = this;
    const users = await ctx.model.User.findAll();
    ctx.body = users;
  }

  async create() {
    const { ctx } = this;
    const { name, age } = ctx.request.body;
    const user = await ctx.model.User.create({ name, age });
    ctx.body = user;
  }

  async show() {
    const { ctx } = this;
    const { id } = ctx.params;
    const user = await ctx.model.User.findByPk(id);
    ctx.body = user;
  }

  async update() {
    const { ctx } = this;
    const { id } = ctx.params;
    const { name, age } = ctx.request.body;
    const user = await ctx.model.User.findByPk(id);
    await user.update({ name, age });
    ctx.body = user;
  }

  async destroy() {
    const { ctx } = this;
    const { id } = ctx.params;
    const user = await ctx.model.User.findByPk(id);
    await user.destroy();
    ctx.status = 204;
  }
}

上述代码中,我们定义了一系列与用户相关的接口,包括获取用户列表、创建用户、获取单个用户、更新用户信息和删除用户等功能。在每个接口实现中,我们通过ctx.model.User来与数据库进行交互。

6. 总结

到此为止,我们已经完成了egg-mysql的用法示例。首先,我们安装了egg-mysql插件,并在配置文件中进行了相关配置。然后,我们创建了一个与user表对应的Model,并在controller中编写了业务逻辑