egg中使用Sequelize
egg
在以往之前都是使用express,对自己也没什么规范要求,数据库中也是也是创建了不规则的命名,导致在后期不太好维护,查找起来也容易乱套。
Sequelize
对Sequelize的介绍网上一找一大堆,首先简要的了解一下它是什么,在egg官网中对它的描述是
sequelize 是一个广泛使用的 ORM 框架,它支持 MySQL、PostgreSQL、SQLite 和 MSSQL 等多个数据源。
ORM是什么呢?看看这个就应该明白了https://www.cnblogs.com/huanhang/p/6054908.html
本人在使用的过程
首先是一些准备工作
npm i -g sequelize
npm i -g sequelize-automate
npm i -g mysql2
执行完以上三步,接下来
sequelize-automate -t egg -h 数据库地址 -d 数据库名称 -u 用户 -p 密码 -P 3306 -e mysql -o model -C true
把上述命令替换成自己的数据库信息,执行即可,要知道上面的更详细的请自行搜索,这里只记录了几个主要的
到这里,你的项目中就会多出一个文件夹,我的 -o 后面是model,所以是一个model文件夹,名称可以自己改。
config.default.js
const userConfig = {
// myAppName: 'egg',
listen:{
port:7001,
hostname:'17.0.0.1'
},
validate: {
convert: true,
},
sequelize: {
dialect: 'mysql',
host: '地址',
port: '3306',
user: '用户名',
password: '密码',
database: '数据库名',
pool: {
max: 5,
min: 0,
idle: 10000,
},
define: {
timestamps: false,
freezeTableName: true,//禁止转换为复数
// underscored:true,//禁止转换驼峰
dialectOptions: {
dateStrings: true,
typeCast: true,
},
},
dialectOptions: {// 格式化时间,不然就是2022-09-29T09:14:03.102Z
dateStrings: true,
typeCast: true
},
timezone: '+08:00', // 东八时区
},
cors: {
origin: '*',
allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH',
},
origin: {
whiteList: [ '*' ],
},
security: {
domainWhiteList: [ '*' ],
csrf: {
enable: false,
},
},
};
此作为一个参考,实际与自己的进行对比。
注:记得在plugin.js中开启对应的插件。
CURD
C
//service文件
async getSer(data) {
try {
let res = await this.ctx.model.User.create({
...data
});
if (res.dataValues) {
return '增加成功';
}
} catch (e) {
console.log(e)
return '插入失败';
}
}
//controller文件
async getmation(){
const { ctx } = this
const {method} = ctx.req
const param = method === 'POST'? ctx.request.body : ctx.request.query;
const result = await ctx.service.jobSer.getSer(param)
ctx.body = {
success: 1,
data:result,
code: 200
}
}
U
//service文件
async getSer(id,data) {
try {
let res = await this.ctx.model.User.update(data, {
where: {
id: id
}
});
return '修改成功';
} catch (e) {
console.log(e)
return '修改失败';
}
}
//controller文件
async getmation(){
const { ctx } = this
const param = ctx.request.body
const result = await ctx.service.jobSer.getSer(param.id,param)
ctx.body = {
success: 1,
data:result,
code: 200
}
}
R
//service文件
async getSer(data) {
try {
const { pageNum, pageSize } = data.pagination
// 计算分页偏移量
const offset = this.ctx.helper.calcPagingOffset(pageNum, pageSize);
let res = await this.ctx.model.User.findAndCountAll(
{
order: [
['create', 'asc'],
// ['create', 'desc'],
],
limit: pageSize !== -1*1 ? parseInt(pageSize) : null,
offset: offset ? parseInt(offset) : null,
where:{
type:{
[Op.like]: `${pagination.type}%`
}
}
}
)
return res;
} catch (e) {
console.log(e)
return '查询失败';
}
}
//controller文件
async getmation(){
const { ctx } = this
const param = ctx.request.body
const result = await ctx.service.jobSer.getSer(param)
ctx.body = {
success: 1,
data:result,
code: 200
}
}
D
//service文件
async getSer(data) {
try {
const { pageNum, pageSize } = data.pagination
// 计算分页偏移量
const offset = this.ctx.helper.calcPagingOffset(pageNum, pageSize);
let res = await this.ctx.model.User.destroy({
where: {id}
})
return '删除成功';
} catch (e) {
console.log(e)
return '删除失败';
}
}
//controller文件
async getmation(){
const { ctx } = this
const param = ctx.request.body
const result = await ctx.service.jobSer.getSer(param)
ctx.body = {
success: 1,
data:result,
code: 200
}
}
以上就是一个简单的CURD
更多请看https://juejin.cn/post/7051783187214630926#heading-15
下次是什么文章呢,不想了,到点了又,该走了……