欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 后端Node学习项目-用户管理-增删改查

后端Node学习项目-用户管理-增删改查

2025/2/24 10:22:37 来源:https://blog.csdn.net/tianqingmuyu/article/details/143743857  浏览:    关键词:后端Node学习项目-用户管理-增删改查

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}`)
})

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词