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

下次是什么文章呢,不想了,到点了又,该走了……

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值