zoukankan      html  css  js  c++  java
  • 17 ~ express ~ 分类的显示 ,修改 和 删除

    一,前台显示 /views/admin/category.html

    {% extends 'layout.html' %}
    {% block main %}
      <ol class="breadcrumb">
        <li><a href="/admin/category">分类首页</a></li>
        <li><span>分类列表</span></li>
      </ol>

      <h3>分类列表</h3>

      <table class="table table-bordered">
        <tr>
          <th>ID</th>
          <th>分类名称</th>
          <th>操作</th>
        </tr>
        <!-- 循环输出数组 . id是对象,需要转换成字符串 -->
     
        {% for category in categories %}
        <tr>
          <td> {{category._id.toString()}}</td>
          <td> {{category.category_name}}</td>
          <td>
            <!-- 【 错误的案例 : 忘记加路由 】 <a href="/category/edit?id={{category._id.toString()}}">修改</a> | -->
            <a href="/admin/category/edit?id={{category._id.toString()}}">修改</a> |
            <a href="/admin/category/delete?id={{category._id.toString()}}">删除</a>
          </td>
        {% endfor %}
        </tr>
      </table>


      <div class="btn-group" role="group" aria-label="...">
        <a href="/admin/category?page={{page-1}}" class="btn btn-default">上一页</a>
        <a href="/admin/category?page={{page+1}}" class="btn btn-default">下一页</a>
        <li>一共有 {{count}} 条数据</li>
        <li>每页显示 {{limit}} 条数据</li>
        <li>一共有 {{pages}} 页</li>
        <li>当前是在 {{page}} 页</li>
      </div>
    {% endblock %}
     
    二,后台 /router/admin.js

    /**
    * 分类管理,显示所有分类的信息
    */
    router.get('/category',(req,res)=>{
     
    var page = Number(req.query.page || 1) // 如果没有传值,默认为1
    var limit = 10
    var pages = 1

      Category.count().then((count)=>{

    // 计算总页数,向上取整数,去最大值
    pages = Math.ceil(count / limit)
     
    // 页数取值不能超过总页数的值
    page = Math.min(page,pages)
     
    // 取值不能小于1
    page = Math.max(page,1)

    var skip = (page-1)*limit

        Category.find().limit(limit).skip(skip).then((categories) => {
     
        res.render('admin/category',{
    userInfo: req.userInfo,
    categories:categories,
    page:page,
    pages:pages,
    count:count,
    limit:limit
    })
     
        })
      })
     
     
    })

     

    /**
    * 分类修改 ,先显示,再修改
    *
    * 1,获取 [显示] (get)
    */
    router.get('/category/edit',(req,res)=>{
      // 获取要修改的分类的信息,以表单的形式展示

      //获取 id
      var id = req.query.id || ''

      //根据 id 查找
      Category.findOne({
        _id:id // 【 以 MongoDB 数据库字段 _id 为标准 ,不是 id ,视频中的bug 】
      }).then((category)=>{
        if(!category){
          res.render('admin/error',{
            user:req.userInfo,
            message:'要修改的分类信息不存在'
          })
          return Promise.reject()
        }else{
          res.render('admin/category_edit',{
            user:req.userInfo,
            category:category
          })
        }
      })
    })

    /**
    * 分类修改
    *
    * 2, [保存]修改的数据(post)
    */
    router.post('/category/edit',(req,res)=>{
      //获取 id
      var id = req.query.id || ''

      //获取提交要修改的名称
      var category_name = req.body.category_name || ''
      console.log('category_name :'+category_name)

      //数据库查询要修改的这条数据是否存在
      Category.findOne({
        _id:id,
      }).then((rs)=>{
        if(!rs){
          res.render('admin/error',{
            user:req.userInfo,
            message:'要修改的分类信息不存在'
          })
          return Promise.reject()
        }else{
          //当用户没有做任何修改时
          if(rs.category_name==category_name){
            res.render('admin/error',{
              user:req.userInfo,
              message:'修改成功 --(没有做任何修改,这是条假信息)'
            })
            return Promise.reject()
          }else{
            // 判断要修改的数据在数据库中是否已存在,存在则返回错误信息,不存在则保存
     
            /**
             * return值会走到下面的then中,返回同名的分类名称
              */
            return Category.findOne({
    /**
    * 1,{$ne:id} : 不等于当前的id . 范围更广
    * 2,查询数据库中 id 不是要修改的这个id 但是 名称相同的记录
    * 3,如果存在说明 : 有重复 。拒绝修改
    */
    _id:{$ne:id},
    category_name:category_name
            })

          }

        }
     
       }).then((sameCategory)=>{
        if(sameCategory){
          res.render('admin/error',{
            user:req.userInfo,
            message:'数据库中已有同名的名称存在'
          })
          return Promise.reject()
        }else{
    /**
    * 更新
    * 第一个参数 : 条件
    * 第二个参数 : 修改的字段
    * return 丢出去给then使用
    */
    return Category.update({
        _id:id
      },{
        category_name:category_name
      })
    }
      }).then((rs)=>{
          if(rs){
      res.render('admin/success',{
        user:req.userInfo,
        message:'分类名称修改成功'
      })
          }
      })

    })


    /**
    * 分类删除
    */
    router.get('/category/delete',(req,res)=>{
     
      //获取要删除分类的id
      var id = req.query.id || ''

      //直接删除
      Category.remove({
        _id:id
      }).then((rs)=>{
        if(rs){
          res.render('admin/success',{
            user:req.userInfo,
            message:'分类删除成功'
          })
        }
      })
     
    })
  • 相关阅读:
    python--函数的返回值、函数的参数
    python--字典,解包
    Vue--ElementUI实现头部组件和左侧组件效果
    Vue--整体页面布局
    jmeter--non GUI
    python--切片,字符串操作
    celery--调用异步任务的三种方法和task参数
    celery--实现异步任务
    celery--介绍
    开发问题记录
  • 原文地址:https://www.cnblogs.com/500m/p/11032522.html
Copyright © 2011-2022 走看看