egg-sequelize使用

mac 安装mysql详细教程

  • 下载最新的mysql版本

  • 安装mysql,需要注意的是,现在安装的时候,可以直接设置密码。选第二个Use Legacy Password,来设置密码

    设置mysql登录密码

  • 安装Navicat Premium客户端,然后连接mysql。上面本人设置的密码是123456。所以这部密码直接输入。

  • 创建数据库,这边创建了一个minipro来做测试。

连接mysql

搭建egg脚手架

  • egg官方文档

  • egg-Sequelize文档

  • 创建一个简单的egg骨架

npm init egg --type=simple
  • 添加egg-sequelize组件到项目中
npm install --save egg-sequelize mysql2
  • config/plugin.js底下添加代码。记得要把默认的export删了。整个文件如下。
    plugin.js文件内容
exports.sequelize = {
  enable: true,
  package: 'egg-sequelize',
};
  • config.default.js添加代码配置。这边还可以拓展很多,比如支持中文和emoji表情等。
// 添加mysql的ORM
  config.sequelize = {
    dialect: 'mysql', // support: mysql, mariadb, postgres, mssql
    database: 'minipro', //数据库名
    host: '127.0.0.1',
    port: '3306',
    username: 'root', //账号
    password: '123456', //密码
  };
  • model文件夹底下创建user.js添加如下代码。这些与数据库的表一一对应。也是所谓的ORM。
'use strict';
module.exports = app => {
  const { STRING, INTEGER } = app.Sequelize;
  // 创建USER表
  const User = app.model.define('user', {
    open_id: { type:STRING, allowNull: false },
    nick_name: { type: STRING },
    avatar_url: { type: STRING },
    gender: { type: INTEGER },
    province: { type: STRING },
    city: { type: STRING },
    country: { type: STRING },
  });
  return User;
}
  • service文件夹底下创建user.js添加如下代码。service就是主要来做数据的增删改查的工作。
'use strict'

const Service = require('egg').Service;

class UserService extends Service {
  constructor(ctx) {
    super(ctx);
    // 将用户的模型赋值在全局
    this.model = ctx.model.User;
  }

  /**
   * 查询单条
   */
  async findOne(option) {
    const result = await this.model.findOne(option).then(res => {
      return res ? res.toJSON() : res;
    });
    return result;
  }

  async saveUserInfo(data) {
    console.log('this.model.upsert');
    
    await this.model.upsert({
      nick_name: 'radish2', 
      avatar_url: '', 
      gender: 1, 
      province: 'fuck', 
      city:'fuck', 
      country:'fuck',
      open_id: 'qwer'
    });

    const user = await this.findOne({
      where: {
        open_id: 'qwer'
      }
    });
    
    return user;
  }
}
module.exports = UserService;
  • controller文件夹底下创建user.js添加如下代码。
'use strict'
const Controller = require('egg').Controller;

class UserController extends Controller {
  // async getUserInfoById() {

  // }


  async saveUserInfo() {
    const { ctx } = this;
    const { nick_name, avatar_url, gender, province, city, country, open_id } = ctx.request.body;
    const result = await ctx.service.user.saveUserInfo({
      nick_name, avatar_url, gender, province, city, country, open_id
    });
    ctx.status = 200;
    ctx.body = {
      success: true,
      result,
    };
  }
}
module.exports = UserController;
  • router.js添加如下代码。
'use strict';

/**
 * @param {Egg.Application} app - egg application
 */
module.exports = app => {
  const { router, controller } = app;
  router.post('/user/saveUserInfo', controller.user.saveUserInfo);
};

  • 在根目录下创建app.js文件。添加如下代码,写入该方法会自动创建表。
module.exports = app => {
  app.beforeStart(async () => {
    // 写入该方法会自动创建表
    await app.model.sync();
  });
};

  • 启动项目,就可以看到数据库的表都创建成功了。
2020-05-21 15:08:04,327 INFO 5869 [egg-sequelize](24ms) Executed (default): CREATE TABLE IF NOT EXISTS `users` (`id` INTEGER NOT NULL auto_increment , `open_id` VARCHAR(255) NOT NULL, `nick_name` VARCHAR(255), `avatar_url` VARCHAR(255), `gender` INTEGER, `province` VARCHAR(255), `city` VARCHAR(255), `country` VARCHAR(255), `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
2020-05-21 15:08:04,329 INFO 5869 [egg-sequelize](26ms) Executed (default): CREATE TABLE IF NOT EXISTS `users` (`id` INTEGER NOT NULL auto_increment , `open_id` VARCHAR(255) NOT NULL, `nick_name` VARCHAR(255), `avatar_url` VARCHAR(255), `gender` INTEGER, `province` VARCHAR(255), `city` VARCHAR(255), `country` VARCHAR(255), `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
2020-05-21 15:08:04,333 INFO 5869 [egg-sequelize](3ms) Executed (default): SHOW INDEX FROM `users` FROM `minipro`
2020-05-21 15:08:04,334 INFO 5869 [egg-sequelize](4ms) Executed (default): SHOW INDEX FROM `users` FROM `minipro`
2020-05-21 15:08:04,342 INFO 5865 [master] egg started on http://127.0.0.1:7001 (1819ms)
数据库创建表

你可能感兴趣的:(egg-sequelize使用)