koa中使用sequelize
文章目录
- 一.安装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
}
还没有评论,来说两句吧...