博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
egg(63,64,65)--商品分类的curd,上传图片时生成多种分辨率的图片,表单最多提交个数...
阅读量:6686 次
发布时间:2019-06-25

本文共 9539 字,大约阅读时间需要 31 分钟。

model

app/model/goods_cate.js
module.exports = app => {    const mongoose = app.mongoose;    const Schema = mongoose.Schema;    var d=new Date();       const GoodsCateSchema = new Schema({      title:{ type:String },      cate_img: { type: String  },      filter_attr: { type: String  },      //筛选id      link:{ type: String  },        template:{ /*指定当前分类的模板*/          type:String      },      pid:{          type:Schema.Types.Mixed  //混合类型       },      sub_title:{  /*seo相关的标题  关键词  描述*/        type:String      },      keywords:{        type:String      },      description:{        type:String      },      status: { type: Number,default:1  },          add_time: {                   type:Number,                default: d.getTime()          }    });     return mongoose.model('GoodsCate', GoodsCateSchema,'goods_cate');  }

router.js

router.get('/admin/goodsCate', controller.admin.goodsCate.index);   router.get('/admin/goodsCate/add', controller.admin.goodsCate.add);   router.post('/admin/goodsCate/doAdd', controller.admin.goodsCate.doAdd);

增加

controller

app/controller/admin/goodsCate.js
async add(){    var result = await this.ctx.model.GoodsCate.find({'pid':'0'})    await this.ctx.render('admin/goodsCate/add',{        cateList:result    });  }  async doAdd(){    let parts = this.ctx.multipart({ autoFields: true });    let files = {};                   let stream;    while ((stream = await parts()) != null) {        if (!stream.filename) {                    break;        }               let fieldname = stream.fieldname;  //file表单的名字        //上传图片的目录        let dir=await this.service.tools.getUploadFile(stream.filename);        let target = dir.uploadDir;        let writeStream = fs.createWriteStream(target);        await pump(stream, writeStream);          files=Object.assign(files,{          [fieldname]:dir.saveDir            })            }             if(parts.field.pid!=0){            parts.field.pid=this.app.mongoose.Types.ObjectId(parts.field.pid);    //调用mongoose里面的方法把字符串转换成ObjectId                 }    let goodsCate =new this.ctx.model.GoodsCate(Object.assign(files,parts.field));    await goodsCate.save();    await this.success('/admin/goodsCate','增加分类成功');  }

view

app/view/admin/goodsCate/add.html
  1. 一级分类的pid是0,顶级分类
  2. 二级分类的pid_id,一级分类(如下图的手机/电话卡)
<%- include ../public/page_header.html %>
增加商品分类
  • 分类名称:
  • 上级分类:
  • 分类图片:
  • 筛选属性:
  • 跳转地址:
  • 分类模板: 空表示默认模板
  • Seo标题:
  • Seo关键词:
  • Seo描述:
  • 排  序:
  • 状  态:  

效果

clipboard.png

查找

controller

app/controller/admin/goodsCate.js
  1. 通过pid关联自己查询
  2. match筛选pid为0的数据
async index() {    var result=await this.ctx.model.GoodsCate.aggregate([             {          $lookup:{            from:'goods_cate',            localField:'_id',            foreignField:'pid',            as:'items'                }             },       {          $match:{            "pid":'0'          }       }       ])    console.log(JSON.stringify(result));    await this.ctx.render('admin/goodsCate/index',{      list:result    });  }

view

app/view/admin/goodsCate/index.html
<%- include ../public/page_header.html %>            
商品分类列表
增加商品分类
<%for(var i=0;i
<%for(var j=0;j
<%}%> <%}%>
分类名称 分类图片 排序 状态 操作
<%=list[i].title%> <%=list[i].sort%> <%if(list[i].status==1){%> <%}else{%> <%}%>  修改 删除
-----<%=list[i].items[j].title%> <%=list[i].items[j].sort%> <%if(list[i].status==1){%> <%}else{%> <%}%>  修改 删除

效果

  1. 红色为一级分类
  2. 蓝色为二级分类

clipboard.png

clipboard.png

上传图片时,生成多种分辨率的图片

安装依赖

cnpm install jimp --save

service

app/service/tools.js
  1. resize 尺寸
  2. quality 质量
  3. write 名字
const Jimp = require("jimp");  //生成缩略图的模块  async jimpImg(target){    //上传图片成功以后生成缩略图    Jimp.read(target, (err, lenna) => {     if (err) throw err;                     lenna.resize(200, 200) // 尺寸               .quality(90) // 质量                                .write(target+'_200x200'+path.extname(target)); // save            lenna.resize(400, 400) // 尺寸               .quality(90) // 质量                                 .write(target+'_400x400'+path.extname(target)); // save     }); }

controller

app/controller/admin/goodsCate.js
增加一行
this.service.tools.jimpImg(target);
async doAdd(){    let parts = this.ctx.multipart({ autoFields: true });    let files = {};                   let stream;    while ((stream = await parts()) != null) {        if (!stream.filename) {                    break;        }               let fieldname = stream.fieldname;  //file表单的名字        //上传图片的目录        let dir=await this.service.tools.getUploadFile(stream.filename);        let target = dir.uploadDir;        let writeStream = fs.createWriteStream(target);        await pump(stream, writeStream);          files=Object.assign(files,{          [fieldname]:dir.saveDir            })        this.service.tools.jimpImg(target);            }             if(parts.field.pid!=0){            parts.field.pid=this.app.mongoose.Types.ObjectId(parts.field.pid);    //调用mongoose里面的方法把字符串转换成ObjectId                 }    let goodsCate =new this.ctx.model.GoodsCate(Object.assign(files,parts.field));    await goodsCate.save();    await this.success('/admin/goodsCate','增加分类成功');  }

效果

clipboard.png

clipboard.png

编辑

controller

app/controller/admin/goodsCate.js
async edit() {    var id = this.ctx.request.query.id;    var result = await this.ctx.model.GoodsCate.find({      "_id": id    });    var cateList = await this.ctx.model.GoodsCate.find({      "pid": '0'    });    await this.ctx.render('admin/goodsCate/edit', {      cateList: cateList,      list: result[0]    });  }  async doEdit() {    let parts = this.ctx.multipart({      autoFields: true    });    let files = {};    let stream;    while ((stream = await parts()) != null) {      if (!stream.filename) {        break;      }      let fieldname = stream.fieldname; //file表单的名字      //上传图片的目录      let dir = await this.service.tools.getUploadFile(stream.filename);      let target = dir.uploadDir;      let writeStream = fs.createWriteStream(target);      await pump(stream, writeStream);      files = Object.assign(files, {        [fieldname]: dir.saveDir      })      //生成缩略图      this.service.tools.jimpImg(target);    }    if (parts.field.pid != 0) {      parts.field.pid = this.app.mongoose.Types.ObjectId(parts.field.pid); //调用mongoose里面的方法把字符串转换成ObjectId             }    var id = parts.field.id;    var updateResult = Object.assign(files, parts.field);    await this.ctx.model.GoodsCate.updateOne({      "_id": id    }, updateResult);    await this.success('/admin/goodsCate', '修改分类成功');  }

view

app/view/admin/goodsCate/edit.html
<%- include ../public/page_header.html %>    
编辑商品分类
  • 分类名称:
  • 上级分类:
  • 分类图片:
  • 筛选属性:
  • 跳转地址:
  • 分类模板: 空表示默认模板
  • Seo标题:
  • Seo关键词:
  • Seo描述:
  • 排  序:
  • 状  态: <%if(list.status==1){%> checked <%}%> value="1" id="a"/> <%if(list.status==0){%> checked <%}%> name="status" value="0" id="b"/>  

效果

默认选中上级分类

clipboard.png

表单最多提交个数

  1. egg默认设置表单提交个数为10
  2. Reach fields limit (code: Request_fields_limit) 翻译后 达到字段限制(代码:Request_fields_limit)

修改config,自定义个数

config/config.default.js
config.multipart = {      fields: '50'   };

clipboard.png

转载地址:http://vfeao.baihongyu.com/

你可能感兴趣的文章
day04-python列表
查看>>
RabbitMQ延迟队列
查看>>
China中间件 微信公众号 和 helloweblogic qq群欢迎加入!
查看>>
发现了10个超炫超有用的js库/插件
查看>>
【374】Adobe Acrobat 操作技巧
查看>>
Excel VBA 循环“我中毒了~”
查看>>
Builder(建造者)模式
查看>>
js模拟点击打开超链接
查看>>
JAVA-WEB总结02
查看>>
分子图形学(转载自维基,英文)
查看>>
分子图形系统介绍 - 不断更新中
查看>>
MVP框架 – Ted Mosby的软件架构
查看>>
java程序员菜鸟进阶(九)windows下搭建SVN服务器及配置myeclipse SVN客户端
查看>>
C#基础蛋疼到爆的Byte类型表数范围之网兜毛衣见解……
查看>>
技术走向管理一些思考(3)-知识工作者的管理
查看>>
关于栈及其应用演示样例
查看>>
2017-4-20 ADO.NET 实体类 数据访问类
查看>>
jQuery插件AjaxFileUpload实现ajax文件上传
查看>>
软件工程——团队答辩
查看>>
东芝线阵CCD芯片TCD1305DG驱动时序设计
查看>>