一,前台显示 /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:'分类删除成功'
      })
    }
  })
 
})

17 ~ express ~ 分类的显示 ,修改 和 删除的更多相关文章

  1. node+mysql+express实现登录/注册/修改密码/删除用户 接口

    实现用户的注册.登录.修改密码.删除用户操作 用到的数据库:nodecms:表:user 目录结构: db目录下存放数据库操作语句: userSQL.js 用户有关的操作语句 router目录 接口路 ...

  2. 6月17 ThinkPHP连接数据库------数据的修改及删除

    1.数据修改操作 save()  实现数据修改,返回受影响的记录条数 具体有两种方式实现数据修改,与添加类似(数组.AR方式) 1.数组方式 a)         $goods = D(“Goods” ...

  3. php部分---人员表和民族表的显示、修改、删除

    1.连接数据库 进行网页的显示 <table width="100%" border="1" cellpadding="0" cell ...

  4. 17、手把手教你Extjs5(十七)模块的新增、修改、删除操作

    上节在Grid展示时做了一个金额单位可以手工选择的功能,如果你要加入其他功能,也只要按照这个模式来操作就行了,比如说你想改变金额字段的颜色.小数位数.零值是否显示.货币符号.单位显示在标题栏或者跟在金 ...

  5. LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据

    http://www.cnblogs.com/yukaizhao/archive/2010/05/13/linq_to_sql_1.html LINQ和 LINQ to SQL 都已经不是一个新事物了 ...

  6. 数据库(概念、语法、DBMS、SQL语言:创建数据库、表格,添加、修改、删除数据记录)

    关系型数据库:以表作为实体,以主键和外键关系作为联系的一种数据结构. 主键:在关系型数据库中,用一个唯一的标识符来标志每一行,这个标识符就是主键.主键有两个特点:非空和不能重复. 外键:在关系型数据库 ...

  7. hive -- 分区,分桶(创建,修改,删除)

    hive -- 分区,分桶(创建,修改,删除) 分区: 静态创建分区: 1. 数据: john doe 10000.0 mary smith 8000.0 todd jones 7000.0 boss ...

  8. python操作三大主流数据库(14)python操作redis之新闻项目实战②新闻数据的展示及修改、删除操作

    python操作三大主流数据库(14)python操作redis之新闻项目实战②新闻数据的展示及修改.删除操作 项目目录: ├── flask_redis_news.py ├── forms.py ├ ...

  9. Quartz动态添加,修改,删除任务(暂停,任务状态,恢复,最近触发时间)

    首页 博客 学院 下载 图文课 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye GitChat 写博客 小程序 消息 登录注册 关闭 quartz_Cron表达式一分钟教程 09-05 ...

随机推荐

  1. Mysql数据库日志,备份及回滚操作

    一.打开二进制日志配置 : 在Windows系统下,对mysql的my.ini的log-bin等进行配置目录位置时,假设要将log-bin的日志配置到D盘的mysqllog的文件为binlog.则可以 ...

  2. flask-Bootstrap Jinja2 原生 模板 和 jumpserver 模板

    #模板 {% block doc -%} <!DOCTYPE html> <html{% block html_attribs %}{% endblock html_attribs ...

  3. Linux 安装 go 以及 arm linux 移植 go

    背景 Go是一门全新的静态类型开发语言,具有自动垃圾回收,丰富的内置类型,函数多返回值,错误处理,匿名函数,并发编程,反射等特性. 从Go1.4之后Go语言的编译器完全由Go语言编写,所以为了从源代码 ...

  4. Redis Cluster 强制kill某一个节点和shutdown某一个节点后修复过程

    redis cluster 命令行,执行以下命令需登录cluster,是集群所独有的集群(cluster)CLUSTER INFO 打印集群的信息CLUSTER NODES 列出集群当前已知的所有节点 ...

  5. ROS大型工程学习(三) ROS常用命令行

    1.rosbag 对ros包进行操作的命令. (1)录制包: rosbag record -a //录制数据包,所有topic都录制 rosbag record /topic_name1 /topic ...

  6. ng-trim

    最近新做了一个需求,要求在angular.js的input 文本框中做到去除首尾空格,实现精确查询. 查了很多正则表达式,后来才发现angular.js项目中默认就能去除首尾空格,ng-trim  默 ...

  7. 数据结构——java Queue类

    定义 队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作. LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用 图例 Que ...

  8. E. MaratonIME does (not do) PAs

    E. MaratonIME does (not do) PAs time limit per test 2.0 s memory limit per test 256 MB input standar ...

  9. editplus的注册码 4.0

    用户名:jb51.net 序列号:9A72F-84A30-82Z46-BFW79-4FTA8 用户名:freeuser 序列号:F15AD-12490-DAZF5-E4W30-E7T80 注册名:Fr ...

  10. tornado 获取 路径上的参数

    https://www.cnblogs.com/quzq/p/10975766.html class JavaHandler(RequestHandler): #重写RequestHandler中in ...