egg-sequelize --- nodejs

279 阅读2分钟

egg-sequelize --- nodejs

项目 egg + sequelize + mysql2

项目结构

配置

安装模块

npm install --save egg-sequelize

npm install --save egg-cors

npm install --save mysql2

config/pulgin.js

复制代码 exports.sequelize = { enable: true, package: 'egg-sequelize', }; exports.cors = { enable: true, package: 'egg-cors', }; 复制代码

config/config.default.js

复制代码 //mysql配置开始 config.sequelize = { dialect: 'mysql', // support: mysql, mariadb, postgres, mssql dialectOptions: { charset: 'utf8mb4', }, database: 'nodejs', host: 'localhost', port: '3306', username: 'root', password: 'root', timezone: '+08:00', }; //mysql配置结束 //cors配置开始 config.security = { csrf: { enable: false, }, domainWhiteList: [ 'http://localhost:8080' ], }; config.cors = { credentials: true, }; //cors配置结束 复制代码

数据建模

mysql 建表

复制代码 CREATE TABLE collect ( id int(11) NOT NULL AUTO_INCREMENT COMMENT '收藏id', author varchar(255) DEFAULT NULL COMMENT '作者', date varchar(255) DEFAULT NULL COMMENT '日期', link varchar(255) DEFAULT NULL COMMENT '链接', title varchar(255) DEFAULT NULL COMMENT '标题', created_at datetime DEFAULT NULL COMMENT '创建时间', updated_at datetime DEFAULT NULL COMMENT '更改时间', PRIMARY KEY (id), UNIQUE KEY title (title) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='收藏表'; 复制代码

model/collect.js

复制代码 'use strict'; module.exports = app => { const { INTEGER, STRING, DATE } = app.Sequelize; const Collect = app.model.define('collect',{ id:{ type:INTEGER, primaryKey:true, autoIncrement:true }, author:STRING, date:STRING, link:STRING, title:STRING, created_at:DATE, updated_at:DATE },{ freezeTableName: true, //使用默认表名,不会变以collects }) return Collect; } 复制代码

(选配)启动时创建数据库表

复制代码 // {work_dir}/app.js module.exports = app => { app.beforeStart(async function () { await app.model.sync({ force: true }); }); }; 复制代码

service

service/collect.js

复制代码 'use strict';

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

class CollectService extends Service {

// 查询所有数据
async findAll() {
    let ret = await this.ctx.model.Collect.findAll()

    console.log(ret)
    return ret
}

// 增加数据
async create(data) {
    await this.ctx.model.Collect.create(data)
    .then(res => {
        console.log('res: '+ JSON.stringify(res))
    }).catch(err => {
        console.log('err: '+ JSON.stringify(err))
    })

    // try{  
    //     let a= await this.ctx.model.Collect.create(data)
    //     console.log(a)
    // }catch(err){
    //     console.log(err)
    // }
}

// 修改数据
async update() {
    const ret = await this.ctx.model.Collect.update({
        author: '新作者'
    }, {
        where: {
            id: 2
        }
    }).then(ok => {
        console.log('ok')
        console.log(ok)
    }).catch(e => {
        console.log('message:' + e)
    })
}

// 删除数据
async delete(callback){
    await this.ctx.model.Collect.destroy({
        where: {
            id: 20
        }
    }).then(res => {
        console.log('res:' + JSON.stringify(res))
        return callback(JSON.stringify(res))
    })

}


// 自定义查询
async query(callback){
    let sql = 'SELECT COUNT(1) FROM collect'
    let ret = await this.ctx.model.query(sql, {type: 'SELECT'})
    return ret
}

}

module.exports = CollectService; 复制代码

controller

controller/collect.js

复制代码 'use strict';

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

class CollectController extends Controller { async findAll(){ const {ctx} = this; ctx.body = await ctx.service.collect.findAll() }

async create(){
    const ctx = this.ctx
    const body = ctx.request.body

    const ret = await ctx.service.collect.create(body)

    ctx.body = '<h1>添加数据</h1>'
}

async update() {
     await this.ctx.service.collect.update()
    this.ctx.body = '<h1>修改数据</h1>'
}

async delete() {
    await this.ctx.service.collect.delete(function(res, err) {
        console.log('ret: ' + res)
    })
    console.log('哈哈哈哈')
    this.ctx.body = '<h1>删除数据</h1>'
}

}

module.exports = CollectController; 复制代码

router.js

router.get('/collect',controller.collect.findAll) router.post('/create', controller.collect.create) router.get('/update', controller.collect.update) router.get('/delete', controller.collect.delete)

接下来,用postman 或者 其他测试软件自己跑一下...