Egg.js入门之使用MySQL

npm install --save egg-sequelize
npm install --save mysql2

在Egg里下载并配置好sequelize

config.sequelize = {
        dialect: 'mysql',
        database: 'lalala',
        host: 'localhost',
        port: 3306,
        username: 'root',
        password: '123456',
        timezone: '+08:00',
    }

这里的信息要和数据库对应

sequelize: {
        enable: true,
        package: 'egg-sequelize'
    },

在app/model目录创建clazz.js文件(数据模型)对应数据库中的clazz表

module.exports = app => {
  const { STRING } = app.Sequelize;
  //默认情况下sequelize将所有传递的模型名称转换为复数
  const Clazz = app.model.define('clazz', {
    name: STRING,
    //id自动生成
   })
  //创建数据表
  return Clazz;
}

在项目根目录下创建app.js,执行创建表的操作初始化数据库

module.exports = app => {
    app.beforeStart(async function() {
        await app.model.sync({ force: true });
        //每次重启服务器都会删除数据
        await app.model.sync({});
        //sync方法会根据模型创建表
    })
}

表已经有了,进行数据的增删改查

先在路由设置

router.resources('mysql', '/mysql', controller.mysql);

再在controller里实现sequelize函数对数据进行操作

this.app.model.Clazz.findAll();//查询数据
this.app.model.Clazz.findAll({where:{id:1}})//通过where设置查询条件
this.app.model.Clazz.create({name:"xx"})//添加数据
this.app.model.Clazz.update({name:"xx"},{where:{id:1}})//通过条件修改数据
this.app.model.Clazz.destroy({where:{id:1}})//通过条件删除数据
//controller里的代码
'use strict';
const Controller = require('egg').Controller;
​
class mysqlController extends Controller {
    async index() {
        let clazzlist = await this.app.model.Clazz.findAll();
        this.ctx.body = clazzlist;
    }
    async create() {
        let name = this.ctx.request.body.name;
        await this.app.model.Clazz.create({
            name: name
        })
        this.ctx.body = "添加成功";
    }
    async destroy() {
        let id = this.ctx.params.id;
        await this.app.model.Clazz.destroy({ where: { id: id } });
    }
    async update() {
        let id = this.ctx.params.id; //要修改的id
        let name = this.ctx.request.body.nam;
        await this.app.model.Clazz.update({ name: name }, {
            where: { id: id }
        })
        this.ctx.body = "修改成功"
    }
}
​
module.exports = mysqlController;

实现学生和班级的关系用外键

定义一个student.js的model

module.exports = app => {
    const { STRING, DOUBLE } = app.Sequelize;
    //默认情况下sequelize将所有传递的模型名称转换为复数
    const Student = app.model.define('student', {
            name: STRING,
            achievement: DOUBLE
                //id自动生成
        })
        //创建数据表
    Student.associate = function() {
        app.model.Student.belongsTo(app.model.Clazz, {
            foreignKey: 'clazz_id',
            as: 'clazz' //起别名
        })
    }
    return Student;
}

现在学生的model里就有id,name,clazz_id了

之后只需要再创建student.js其他和clazz.js是大同小异的

你可能感兴趣的:(后端,服务器)