model层实现
文件创建
在models文件夹下创建user.js
代码实现
const { DataTypes } = require('sequelize')
const { db } = require('./index')const User = db.define('user', {id: {type: DataTypes.INTEGER,primaryKey: true, // 主键autoIncrement: true, // 内容自增allowNull: false, // 是否允许为空unique: true, // 不可重复comment: '用户id,唯一'},username: {type: DataTypes.STRING,allowNull: false,comment: '用户姓名'},nickname: {type: DataTypes.STRING,allowNull: true,comment: '用户昵称'},password: {type: DataTypes.STRING,allowNull: false,comment: '用户密码'},gender: {type: DataTypes.INTEGER,allowNull: false,comment: '用户性别'},avatar: {type: DataTypes.STRING,allowNull: false,comment: '头像'},role: {type: DataTypes.INTEGER,allowNull: false,comment: '角色'},education: {type: DataTypes.INTEGER,allowNull: true,comment: '学历'},school: {type: DataTypes.STRING,allowNull: true,comment: '毕业院校'},banjiId: {type: DataTypes.INTEGER,allowNull: true,comment: '班级id'}
})
// 同步创建user表
// User.sync({
// force: false
// }).then(res => {
// console.log('res====>', res);
// }).catch(err => {
// console.log('err====>', err);
// })module.exports = User
内容解释
DataTypes
是一个含有常用数据类型的类,它用于使用sequelize.define()方法定义模型时指定列的数据类型 参考文章
创建时间和更新时间
这两个字段不用创建,在上文中数据库连接配置中,timestamps属性就是做这个的,后续的赋值和修改也不用做处理
数据表同步
主要是不会在软件中建表,我第一次就是自己在Navicat中建的,结果查询一直出错。直接同步,成功。
同步建表时候需要把导出语句:module.exports = user 这一句先注释掉哈
service层实现
文件创建
- 根目录下创建service文件夹
- 在service文件夹下创建user.js
代码实现
const User = require('../models/user')
const { Op } = require("sequelize"); // 设置数据库语句查询条件
class UserService {// 查询所有用户async findAllUser (ctx) {const { username, gender, role, size, page } = ctx.queryconst queryParams = {}if (username) { // 主要用于参数为空时不设置数据库查询条件queryParams.username = {[Op.like]: `%${username}%`}}if (gender) {queryParams.gender = gender}if (role) {queryParams.role = role}// + 的作用在于将size转为数字const res = await User.findAndCountAll({where: queryParams,limit: +size,offset: (page - 1) * size,})return {total: res.count,records: res.rows}}// 查询用户async findUser (userInfo) {const res = await User.findOne({where: {username: userInfo.username}})return res.dataValues}// 创建用户async createUser (userInfo) {const res = await User.create(userInfo)return res.dataValues}// 更新用户async updateUser (id, userInfo) {const res = await User.update(userInfo, {where: {id}})return res.dataValues}// 删除用户async deleteUser (id) {const res = await User.destroy({where: {id}})return res.dataValues}
}module.exports = new UserService()
内容解释
Op的使用
参考文章
controller层实现
文件创建
- 根目录下创建controller文件夹
- 在controller文件夹下创建user.js
代码实现
const { findAllUser, createUser, updateUser, deleteUser } = require('../service/user')
class UserController {// 查询所有用户async findAllUser (ctx) {const res = await findAllUser(ctx)ctx.body = {code: 200,message: '查询成功',data: res,}}// 创建用户async addUserInfo (ctx) {const userInfo = ctx.request.bodytry {const res = await createUser(userInfo)console.log('res===>create', res);ctx.body = {code: 200,message: '用户创建成功',data: {id: res.id,userName: res.userName,},}} catch (error) {}}// 更新用户async updateUserInfo (ctx) {const { id, ...info } = ctx.request.bodytry {const res = await updateUser(id, info)console.log('res===>update', res);ctx.body = {code: 200,message: '用户更新成功',data: res,}} catch (error) {}}// 删除用户async deleteUserInfo (ctx) {const { id } = ctx.request.bodytry {const res = await deleteUser(id)console.log('res===>delete', res);ctx.body = {code: 200,message: '用户删除成功',data: res,}} catch (error) {}}
}module.exports = new UserController()
内容解释
请求参数的获取
- get请求:参数中ctx.query中及逆行解构即可
- post请求:参数都在ctx.request.body中
响应数据封装
后续可以对响应数据结构进行封装,各位自行实现哈,或者等待下一版本的开发记录
router层实现
文件创建
- 根目录下创建router文件夹
- 在router文件夹下创建user.js
代码实现
const Router = require('koa-router')
const router = new Router({ prefix: '/user' })
const { findAllUser, addUserInfo, updateUserInfo, deleteUserInfo } = require('../controller/user')
router.get('/getList', findAllUser)
router.post('/addUser', addUserInfo)
router.post('/updateUser', updateUserInfo)
router.post('/delUser', deleteUserInfo)module.exports = router
内容解释
prefix
模块主路由设置。
const router = new Router({ prefix: '/user' })
表示用户模块的接口地址都以/user开头
启动文件补充
const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
// 引入路由
const Router = require('koa-router');
const router = new Router();
const { serverSetting } = require('./config');
// 引入用户模块路由
const userRouter = require('./router/user');
const app = new Koa();
app.use(bodyParser());
// 总路由加载用户路由
router.use(userRouter.routes())
//服务加载总路由信息
app.use(router.routes()).use(router.allowedMethods())
app.listen(serverSetting.port, () => {console.log(`server is running at http://${serverSetting.ipAddress}:${serverSetting.port}/${serverSetting.proxy}`)
})