二、egg.js项目中集成Sequelize

egg.js项目中集成Sequelize

本例子中,项目集成了 orm 框架 Sequelize,通过命令行的方式生成数据库。本例使用的的是mssql数据库,如要使用mysql数据自行到官方网站查询。

例子中使用的的包有:
egg-sequelize、tedious、sequelize-cli

初始化项目

通过 npm 初始化一个项目

$ mkdir api 
$ cd api 
$ npm init egg -- type=simple //或npm init egg --type=ts
$ npm i  

安装配置 egg-sequelize

  • 安装 egg-sequelize
npm i egg-sequelize tedious --save 
  • config/plugin.js 中引入 egg-sequelize 插件

    exports.sequelize = {
      enable: true,
      package: 'egg-sequelize',
    };
    
  • config/config.default.js 中编写 sequelize 配置

    config.sequelize = {
      dialect: 'mssql',
      host: '数据库地址',
      port: 1433,
      database: '数据库名称',
    };
    
  • 编写对应的模型,在app/model中添加user.js文件,对应的内容如下:

    'use strict';
    
    module.exports = (app) => {
      const { STRING, INTEGER } = app.Sequelize;
      const User = app.model.define('user', {
        id: {
          primaryKey: true,
          type: INTEGER,
          autoIncrement: true,
        },
        username: {
          unique: true,
          allowNull: false,
          type: STRING,
        },
        truename: {
          type: STRING,
        },
        password: {
          allowNull: false,
          type: STRING,
        },
        status: {
          allowNull: false,
          defaultValue: 1,
          type: INTEGER,
        },
        createdBy: {
          type: INTEGER,
        },
        updatedBy: {
          type: INTEGER,
        },
        deletedBy: {
          type: INTEGER,
        },
      });
    
      return User;
    };
    

    初始化数据库和 Migrations

  • 安装 sequelize-cli

    npm install --save-dev sequelize-cli
    

在 egg 项目中,我们希望将所有数据库 Migrations 相关的内容都放在 database 目录下,所以我们在项目根目录下新建一个 .sequelizerc 配置文件:

'use strict';

const path = require('path');

module.exports = {
  config: path.join(__dirname, 'database/config.json'),
  'migrations-path': path.join(__dirname, 'database/migrations'),
  'seeders-path': path.join(__dirname, 'database/seeders'),
  'models-path': path.join(__dirname, 'app/model'),
};
  • 初始化 Migrations 配置文件和目录

    npx sequelize init:config
    npx sequelize init:migrations
    

执行完后会生成 database/config.json 文件和 database/migrations 目录,我们修改一下 database/config.json 中的内容,将其改成我们项目中使用的数据库配置:

{
  "development": {
    "username": "数据库登录用户名",
    "password": '数据库密码',
    "database": "数据库名称",
    "host": "数据库地址",
    "dialect": "mssql"
  },
  "test": {
    "username": "数据库登录用户名",
    "password": '数据库密码',
    "database": "数据库名称",
    "host": "数据库地址",
    "dialect": "mssql"
  }
}

此时 sequelize-cli 和相关的配置也都初始化好了,我们可以开始编写项目的第一个 Migration 文件来创建我们的一个 users 表了。

执行完后会在 database/migrations 目录下生成一个 migration 文件(${timestamp}-init-users.js),我们修改它来处理初始化 users 表:

'use strict';

module.exports = {
  up: async (queryInterface, Sequelize) => {
    
    await queryInterface.createTable('users', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      username: {
        unique: true,
        allowNull: false,
        type: Sequelize.STRING,
      },
      truename: {
        type: Sequelize.STRING
      },
      password: {
        allowNull: false,
        type: Sequelize.STRING
      },
      status: {
        allowNull: false,
        defaultValue: 1,
        type: Sequelize.INTEGER,
      },
      created_at: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updated_at: {
        allowNull: false,
        type: Sequelize.DATE
      },
      deleted_at: {
        type: Sequelize.DATE
      },
      created_by: {
        type: Sequelize.INTEGER,
      },
      updated_by: {
        type: Sequelize.INTEGER,
      },
      deleted_by: {
        type: Sequelize.INTEGER,
      },
    });
  },

  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable('users');
  }
};

  • 执行 migrate 进行数据库变更

    # 升级数据库
    npx sequelize db:migrate
    # 如果有问题需要回滚,可以通过 `db:migrate:undo` 回退一个变更
    # npx sequelize db:migrate:undo
    # 可以通过 `db:migrate:undo:all` 回退到初始状态
    # npx sequelize db:migrate:undo:all
    

    执行之后,我们的数据库初始化就完成了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值