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:'分类删除成功'
      })
    }
  })
 
})
原文地址:https://www.cnblogs.com/500m/p/11032522.html