koa中使用sequelize

sequelize是nodejs最常用的orm框架,类似于java中的JPA,无需写sql语句。

参考资料

Sequelize 中文文档整理(v5版本)
Sequelize API Reference

一.安装sequelize

npm install --save sequelize
#除了安装sequelize还要安装所使用的的数据库驱动模块
npm install --save mysql2

二.建立连接

db/seq.js

/**
 * @description:sequelize实例
 */
const Sequelize = require('sequelize')

//运行环境
const {
    isProd,
    isTest
} = {
    isProd: process.env.NODE_ENV=== 'production',
    isTest: process.env.NODE_ENV === 'test',
}

//mysql配置信息
const {
    host,
    user,
    password,
    database
} = {
    host: 'localhost',
    port: '3306',
    user: 'root',
    password: '123456',
    database: 'test' //数据库需要自己手动建立
}

config = {
    host: host,
    dialect: 'mysql',
}

if (isTest) {
    //测试环境不用打印sql语句
    config.logging = () => {}
}

if (isProd) {
    //线上环境使用连接池
    config.pool = {
        max: 5,
        min: 0,
        idle: 10000
    }
}

const sequelize = new Sequelize(database, user, password, config)

sequelize.authenticate().then((result) => {
    console.log('connect success')
}).catch((err) => {
    console.log('connect error')
});

module.exports = sequelize

三.创建数据模型

db/model/User.js

/**
 * @description 用户数据模型
 */

const seq = require('../seq')

// users
const User = seq.define('user', {
    userName: {
        type: Sequlize.STRING,
        allowNull: false, //是否允许为空
        unique: true, //是否是唯一索引
        comment: '用户名,唯一'
    },
    password: {
        type: Sequlize.STRING,
        allowNull: false,
        comment: '密码'
    },
}, {
    timestamps: true, //默认为true,自动生成`createdAt`和`updatedAt`字段
    freezeTableName: false //默认为false,表名自动是使用复数形式,如user->users
})
module.exports = User

db/model/Blog.js

/**
 * 微博数据模型
 */
const seq = require('../seq')
const Blog = seq.define('blog', {
    userId: {
        type: Sequelize.INTEGER,
        allowNull: false,
        comment: '用户 ID'
    },
    content: {
        type: Sequelize.TEXT,
        allowNull: false,
        comment: '微博内容'
    },
})
module.exports = Blog

db/model/index.js

/**
 * @description:数据模型入口文件
 */

const User = require('./User')
const Blog = require('./Blog')

//可以在此文件中建立外键关联关系

//User一对多Blog Blog-->User
Blog.belongsTo(User, {
    foreignKey: 'userId'
})

// User->Blog
// User.hasMany(Blog) 

module.exports = {
    User,
    Blog,
}

四.模型与数据库同步

db/sync.js

const sequelize = require('./seq')
require('./model/index')
sequelize.sync({
    force: true  //如果表已经存在,则删除表后再创建
}).then((result) => {
    console.log('db async ok')
    process.exit()
}).catch((err) => {
    console.log('db async error')
    console.log(err)
});

手动创建test数据库后,在项目中执行下面命令,即可自动建表

node src/db/sync.js

五.增删改查

service/user.js

//增加用户
async function createUser({
    userName,
    password,
}) {
    const result = await User.create({
        userName,
        password,
    })
    const data = result.dataValues
    return data
}

//删除用户
async function deleteUser(userName) {
    const result = await User.destroy({
        where: {
            userName
        }
    })
    //返回删除的行数
    return result > 0
}

//修改用户
async function updateUser({
    newPassword,
}, {
    userName,
    password
}) {
    //拼接修改内容
    const updateData = {}
    if (newPassword) {
        updateData.password = newPassword
    }
    //拼接查询条件
    const whereData = {
        userName
    }
    if (password) {
        whereData.password = password
    }
    //执行修改
    const result = await User.update(updateData, {
        where: whereData
    })
    return result[0] > 0 //修改的行数
}

//查询用户
async function getUserInfo(userName, password) {
    //拼接查询条件
    let whereOpt = {
        userName
    }
    if (password) {
        Object.assign(whereOpt, {
            password
        })
    }
    const result = await User.findOne({
        attributes: ['id', 'userName'],
        where: whereOpt
    })
    if (result == null) {
        return result
    }
    return result.dataValues
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Selenium399

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值