koa中使用sequelize

本文用来介绍sequelize的常用操作,包括与数据库的连接,表的数据类型的定义,初始化。以及在koa中的使用和增删改查功能。

Sequelize

Sequelize 就是一款比较流行的 ORM 框架(Object Relational Mapping)
ORM 技术是在对象和数据库之间提供了一条桥梁,前台的对象型数据和数据库中的关系型的数据通过这个桥梁来相互转化。

连接数据库及初始化

1)安装依赖包

npm install sequelize mysql mysql2 --save

2)与数据库建立连接

//db.js
const Sequelize = require('sequelize')
const db = {
    database: 'blog', // 使用哪个数据库
    username: 'root', // 用户名
    password: 'xxxx', // 口令
    host: 'localhost', // 主机名
    port: 3306 // 端口号,MySQL默认3306
}
const sequelize = new Sequelize(db.database, db.username,db.password, {
    host: db.host,
    dialect: 'mysql',
    operatorAliases: false,
    pool: {
        max: 5,
        min: 0,
        idle: 30000
    },
    //解决中文输入问题
    define: {
        charset: 'utf8',
        dialectOptions: {
            collate: 'utf8_general_ci'
        }
    }
})

// 测试连接是否成功
sequelize
    .authenticate()
    .then(() => {
        console.log('Connection has been established successfully.')
    })
    .catch(err => {
        console.log('Unable to connect to the database', err)
    })

3)定义数据模型

const articles = sequelize.define(
    'article',  // 定义的表会自动加s,这里的表名为articles
    {
// id自动叠加
        id: {
            type: Sequelize.INTEGER,
            primaryKey: true,
            allowNull: true,
            autoIncrement: true
        },
        stick: {
            type: Sequelize.BOOLEAN,
            allowNull: false,
        },
        icon: {
            type: Sequelize.STRING,
            allowNull: false,
        },
// 时间类型用int,方便后续比较
        date: {
            type: Sequelize.INTEGER,
            allowNull: false,
        },
    },
    {
        timestamps: false  // 不自动生成时间
    }
);
// 导出数据模型model
module.exports = {
    articles,
};

这里比较坑爹的地方就是定义的表名,实际生成后会自动加上‘s’,比如这里就变成了articles。

4)初始化数据

//initData.js
const {articles} =require('./db.js')
articles.sync({force:true}).then(()=>{
    return articles.create({
        id: 1,
        stick: true,
        icon: "assets/picture1.jpg",
        date: (new Date(" 2019/12/31 08:00:20")).getTime()/1000,
    })
})

sync({force:true}),为true,强制同步,先删除表,然后新建;false,新增一条记录。
若要初始化多条数据,使用bulkCreate

articles.sync({force:true}).then(()=>{
    return articles.bulkCreate([{
        id: 1,
        stick: true,
        icon: "assets/picture1.jpg",
        date: (new Date(" 2019/12/31 08:00:20")).getTime()/1000,
    },{
        id: 2,
        stick: true,
        icon: "assets/picture1.jpg",
        date: (new Date(" 2019/12/31 08:00:20")).getTime()/1000,
    }])
})

最后运行node initData.js指令。
至此,sequelize与mysql的连接及数据表的初始化已完成。

在koa中的使用

1)查询 findAll()
所有数据

//index.js
const {articles} =require('../middleware/db.js')
router.get('/allArticles',async ctx=>{
// 获取allArticles表中的所有数据
    const allArticles=await articles.findAll()
    ctx.body=allArticles
})
module.exports=router

符合条件的数据

 articles.findAll({
        where: {
            article_id
        }
    });

2)新增一条数据 create()

 articles.create({
        stick: true,
        icon: "assets/picture1.jpg",
        date: (new Date(" 2019/12/31 08:00:20")).getTime()/1000,
    }).then( (p)=> {
        console.log('created.' + JSON.stringify(p));
    }).catch((err)=> {
        console.log('failed: ' + err);
    });

3)删除一条数据 destroy()

 articles.destroy({
        where: {
             id:1
}
    }).then( (p)=> {
        console.log('deleted.' + JSON.stringify(p));
    }).catch((err)=> {
        console.log('failed: ' + err);
    });

4)更新一条数据 update()

articles.update(
{name: 'lilei'}, 
{
where: {id: 1}
}
)

至此,sequelize在koa中的使用就介绍完毕了。

你可能感兴趣的:(前端)