美文网首页
egg-sequelize连接mysql使用/egg-seque

egg-sequelize连接mysql使用/egg-seque

作者: 莫伊剑客 | 来源:发表于2021-02-23 14:33 被阅读0次

    准备工作

    在这个例子中,我们会使用 sequelize 连接到 MySQL 数据源,因此在开始编写代码之前,我们需要先在本机上安装好 MySQL,如果是 MacOS,可以通过 homebrew 快速安装:

    brew install mysql
    brew services start mysql
    

    初始化项目

    通过 npm 初始化一个项目:

    $ mkdir sequelize-project && cd sequelize-project
    $ npm init egg --type=simple
    $ npm i
    

    安装并配置 egg-sequelize 插件(它会辅助我们将定义好的 Model 对象加载到 app 和 ctx 上)和 mysql2 模块:

    • 安装
    npm install --save egg-sequelize@6.0.0 mysql2@2.2.5
    
    • 在 config/plugin.js 中引入 egg-sequelize 插件
    exports.sequelize = {
      enable: true,
      package: 'egg-sequelize',
    };
    
    • 在 config/config.default.js 中编写 sequelize 配置
    const userConfig = {
        sequelize: {
          dialect: 'mysql',
          host: '127.0.0.1',
          port: 3306,
          username: 'root',
          password: '********',
          database: 'test',
          // 配置数据库时间为东八区北京时间
          timezone: '+08:00'
        }
      };
    
      return {
        ...config,
        ...userConfig,
      };
    

    编写代码

    首先我们来在 app/model/ 目录下编写 user 这个 Model:

    //yarn add uuid@8.3.2
    //yarn add moment@2.29.1
    const { v4: uuidv4 } = require('uuid');
    const moment = require('moment');
    module.exports = function(app) {
      const { STRING, UUID, DataTypes } = app.Sequelize;
      const User = app.model.define(
        'User',
        {
          id: {
            type: UUID,
            unique: true,
            primaryKey: true,
            allowNull: false,
            defaultValue: () => {
              return uuidv4()
                .replace(/-/g, '');
            }
          },
          username: {
            type: STRING(32),
            unique: true,
            allowNull: false,
            comment: '用户名'
          },
          password: {
            type: STRING(255),
            allowNull: false,
            comment: '密码',
          },
          email: {
            type: STRING(64),
            unique: true,
            allowNull: true,
            comment: '邮箱地址',
          },
          phone: {
            type: STRING(20),
            allowNull: true,
            comment: '手机号码',
          },
          avatar: {
            type: STRING(150),
            allowNull: true,
            comment: '头像',
          },
          roles: {
            type: STRING(150),
            allowNull: true,
            comment: '权限',
          },
          createdAt: {
            type: DataTypes.DATE,
            // 对查询结果的日期进行格式化
            get() {
              return moment(this.getDataValue('createdAt'))
                .format('YYYY-MM-DD HH:mm:ss');
            }
          },
          updatedAt: {
            type: DataTypes.DATE,
            // 对查询结果的日期进行格式化
            get() {
              return moment(this.getDataValue('updatedAt'))
                .format('YYYY-MM-DD HH:mm:ss');
            }
          }
        },
        {
          // 要使用 createdAt/updatedAt 必须开启这项配置
          timestamps: true,
          freezeTableName: true,
          // 必须开启 createdAt,updatedAt否则格式化无效 
          // 或这不写配置项
          createdAt: true,
          updatedAt: true
        }
      );
      // 数据库同步
      User.sync();//:如果数据库表不存在,则创建数据库表,如果存在,则不做任何操作
      // User.sync({ force: true });//:如果数据库表已经存在,则先删除数据库表,然后重新创建数据表
      // User.sync({ alter: true });//: 这个会比较数据库表当前状态(比如数据库表的列及数据类型等)与模型的不同之处,然后修改数据库表不同的地方以匹配模型。
      return User;
    };
    
    

    使用数据库

    这时service/controller层就可以进行数据库操作了

    // 查询全部用户信息
      async getAll() {
        const { ctx } = this;
        const res = await ctx.model.User.findAll();
        return ctx.helper.success({ ctx, res });
      }
    

    egg-sequelize常用查询命令请参考Sequelize 中文文档

    相关文章

      网友评论

          本文标题:egg-sequelize连接mysql使用/egg-seque

          本文链接:https://www.haomeiwen.com/subject/rsyrfltx.html