目录
- egg.js 配合 jwt 进行鉴权
- egg.js 配置 mysql 以及简单登录实现
- eggjs+mysql实现图片上传
- eggjs 实现增删改查
- eggjs 搭配 vue+axios 实现登录和获取用户信息
开发
本章节是在于如何实现一个增删改查
前置工作
新建 app -> utils -> utils.js
, 该方法是为了处理返回结果
function responseFormat(status, data) {
if (status) {
return {
code: 200,
msg: '请求成功',
data,
success: true,
};
}
return {
code: 500,
msg: data,
success: false,
};
}
function responseHandleFormat(status) {
if (status) {
return {
code: 200,
msg: '操作成功',
success: true,
};
}
return {
code: 500,
msg: '操作失败',
success: false,
};
}
module.exports = {
responseFormat,
responseHandleFormat,
};
正式开始
数据库建表,表名为 type , 表结构为
添加 sevice -> type.js
'use strict';
const Service = require('egg').Service;
class TypeService extends Service {
//查询一条
async getTypeInfo(params) {
const { app } = this;
try {
const result = await app.mysql.get('type', params);
return result;
} catch (error) {
return null;
}
}
// 查询多条
async query(params) {
const { app } = this;
const { whereObj, limit, offset } = params;
try {
const list = await app.mysql.select('type', {
where: whereObj,
limit,
offset,
});
//
const total = await app.mysql.count('type', whereObj);
return { list, total };
} catch (error) {
console.log(error);
return null;
}
}
// 新增
async add(params) {
const { app } = this;
try {
const result = await app.mysql.insert('type', params);
return result;
} catch (error) {
console.log(error);
return null;
}
}
// 修改
async update(params) {
const { app } = this;
try {
const result = await app.mysql.update('type', params, {
where: {
id: params.id,
},
});
return result;
} catch (error) {
console.log(error);
return null;
}
}
// 删除
async delete(id) {
const { app } = this;
try {
const result = await app.mysql.update('type', { deleteFlag: 0 }, {
where: {
id,
},
});
return result;
} catch (error) {
console.log(error);
return null;
}
}
}
module.exports = TypeService;
添加 controller -> type.js
'use strict';
const Controller = require('egg').Controller;
const { responseFormat, responseHandleFormat } = require('../utils/utils');
class TypeController extends Controller {
//分页查询
async query() {
const { ctx } = this;
const { page = 1, ...filter } = ctx.query;
const limit = parseInt(ctx.query.limit) || 10;
// 假删除
const whereObj = { deleteFlag: 1 };
for (const x in filter) {
switch (x) {
case 'id':
whereObj.id = filter[x];
break;
case 'name':
whereObj.name = filter[x];
break;
default:
break;
}
}
const { total, list } = await ctx.service.type.query({
whereObj,
limit: limit ? limit : null, //limit
offset: page ? (page - 1) * limit : null,
});
ctx.body = responseFormat(true, {
limit, //limit
page, //当前页
total, // 总条数
pages: Math.ceil(total / limit), //总页数
list, //数据
});
}
async saveType() {
const { ctx } = this;
const { name, id } = ctx.request.body;
let result = null;
if (id) {
result = await ctx.service.type.update({ name, id });
} else {
result = await ctx.service.type.add({ name });
}
if (result) {
ctx.body = responseHandleFormat(true);
} else {
responseHandleFormat(false);
}
}
async deleteType() {
const { ctx } = this;
const { id } = ctx.request.body;
const result = await ctx.service.type.delete(id);
if (result) {
ctx.body = responseHandleFormat(true);
} else {
responseHandleFormat(false);
}
}
}
module.exports = TypeController;
添加路由
router.get('/api/type/list', _jwt, controller.type.query); // 获取类型
router.post('/api/type/save', _jwt, controller.type.saveType); // 新增修改类型
router.post('/api/type/delete', _jwt, controller.type.deleteType); // 删除类型
测试结果
分页查询
新增修改,判断为id,没有id就是新增,有id就是修改
删除,这里采用假删除,当 deleteFlag 为 0 的时候为删除
这里有两个字段,暂时还用不到,一个是 user_id
, 为创建者的 id,一个为 type
为预留字段,不用的话可以自行删除