eggjs简单使用

发布于: 5/25/2022 阅读大约需要2分钟

起步

1. 初始化项目

mkdir egg-example && cd egg-example
npm init egg --type=simple
npm i
npm run dev
open <http://localhost:7001>

2. 添加ORM框架

https://eggjs.org/zh-cn/tutorials/sequelize.html

  1. 安装egg-sequelize插件与mysql2
npm install egg-sequelize mysql2 -S2.
  1. 引用插件,  config/plugin.js
module.exports = {
  sequelize: {
    enable: true,
    package: 'egg-sequelize',
  },
};
  1. 编写sequelize配置, config/config.default.js
module.exports = appInfo => {
  // config等默认配置...

  config.sequelize = {
    dialect: 'mysql', // 数据库类型
    host: '你的数据库地址',
    port: 3306,
    user: 'root',
    password: 'pwd',
    database: '需要连接的数据库名称',
  };

  return {
    ...config,
    ...userConfig,
  };
};
  1. 初始化数据库和Migrations
  • 方式1: 手动创建表结构
CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key',
  `name` varchar(30) DEFAULT NULL COMMENT 'user name',
  `age` int(11) DEFAULT NULL COMMENT 'user age',
  `created_at` datetime DEFAULT NULL COMMENT 'created time',
  `updated_at` datetime DEFAULT NULL COMMENT 'updated time',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='user';
  • 方式2: 使用sequelize-cli创建表结构
  1. 安装 sequelize-cli
npm install sequelize-cli -D
  1. 项目根目录创建配置文件(.sequelizerc), 用来放置数据库Migrations相关内容
'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'),
};
  1. 初始化 Migrations 配置文件和目录. 下面命令会自动生成database/config.jsondatabase/migrations
npx sequelize init:config
npx sequelize init:migrations
  1. 修改数据库连接配置 database/config.json
  2. 创建表配置文件, 命令会在 database/migrations 下生成 ${timestamp}-init-users.js 文件
npx sequelize migration:generate --name=init-users
  1. 根据自身需求修改生成的表配置文件${timestamp}-init-users.js
'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');
  },
};
  1. 执行 migrate 进行数据库变更
# 升级数据库
npx sequelize db:migrate
# 如果有问题需要回滚,可以通过 `db:migrate:undo` 回退一个变更
# npx sequelize db:migrate:undo
# 可以通过 `db:migrate:undo:all` 回退到初始状态
# npx sequelize db:migrate:undo:all