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

你可能感兴趣的文章
程序员,代码,理想,老男孩
查看>>
MATLAB GUI新手备忘录(转)
查看>>
mysql sql语句大全
查看>>
php 调试工具及学习PHP垃圾回收机制了解引用计数器的概念
查看>>
Jetty安装配置
查看>>
【Lucene3.6.2入门系列】第10节_Tika
查看>>
Java工厂模式
查看>>
hdu3635 Dragon Balls(带权并查集)
查看>>
java Socket用法详解(转)
查看>>
gitosis使用笔记
查看>>
华为-on练习--身高找到最好的二人
查看>>
指定账户访问共享文件
查看>>
T-SQL—理解CTEs
查看>>
[Falcor] Return the data from server
查看>>
Mac上的软件使用介绍
查看>>
轻量级ORM框架——第一篇:Dapper快速学习
查看>>
Java递归算法——三角数字(消除递归)
查看>>
WebAPi返回类型到底应该是什么才合适,这是个问题?
查看>>
STM32 常用GPIO操作函数记录
查看>>
XML:使用DOM技术解析xML文件中的城市,实现select级联选择
查看>>