nodejs 使用sequelize 连接mysql

1,619 阅读1分钟

全局安装 npm install --save egg-sequelize mysql2 -g

引入插件 (config/plugin.js)

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

编写 sequelize 配置 (config/config.default.js)

config.sequelize = {
  dialect: 'mysql',
  host: '127.0.0.1',
  port: 3306,
  database: 'egg-sequelize',
  dialectOptions: {  // 时间格式化
    dateStrings: true,
    typeCast: true
  },
  define: {
    timestamps: false // don't add the timestamp attributes (updatedAt, createdAt)
  },
  timezone: '+08:00' // 保存为本地时区,mysql保存时会自动保存为UTC格式
  // delegate: 'myModel', // load all models to `app[delegate]` and `ctx[delegate]`, default to `model`
  // baseDir: 'my_model', // load all files in `app/${baseDir}` as models, default to `model`
};

初始化数据库和Migrations(管理数据结构)

安装sequelize-cli, 使用sequelize-cli实现migrations

npm install --save-dev sequelize-cli

把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": "root",
    "password": null,
    "database": "egg-sequelize-doc-default",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

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

npx sequelize migration:generate --name=init-users

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

'use strict';

module.exports = {
  // 在执行数据库升级时调用的函数,创建 users 表
  up: async (queryInterface, Sequelize) => {
    const { INTEGER, DATE, STRING } = Sequelize;
    await queryInterface.createTable('users', {
      id: { type: INTEGER, primaryKey: true, autoIncrement: true },
      name: STRING(30),
      age: INTEGER,
      created_at: DATE,
      updated_at: DATE,
    });
  },
  // 在执行数据库降级时调用的函数,删除 users 表
  down: async queryInterface => {
    await queryInterface.dropTable('users');
  },
};

执行 migrate 进行数据库变更 npx sequelize db:migrate

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

快速创建数据库表模型

利用 egg-sequelize-auto 可以快速生成表模型

全局安装 egg-sequelize-auto 与 mysql2

npm install -g egg-sequelize-auto

npm install -g mysql2

进入项目下,生成表结构

egg-sequelize-auto -o "./app/model" -d databaseName -h localhost -u username -p port -x password -t tableName

一次性生成所有表结构

egg-sequelize-auto -o "./model" -d digapisids -h 192.168.0.205 -u root -x MVKafZN39QnjUmf# -p 13306 -e mysql

使用

await this.ctx.model.models.User.findAll()

最后将这个 controller 挂载到路由上

// app/router.js
module.exports = app => {
  const { router, controller } = app;
  router.get('/api/users', controller.users.users);
};

参考网站:

eggjs.org/zh-cn/tutor… sequelize.org/v5/manual/g… github.com/eggjs/egg-s…