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 或者 其他测试软件自己跑一下...

 

 

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM