一,前台显示 /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. tomcat#结构

    下面是一个tomcat的配置文件,通过分析tomcat配置文件的结构,和相关注释,可以大致了解tomcat的结构 <?xml version="1.0" encoding=& ...

  2. iScroll.js的用法

    概要 iScroll 4 这个版本完全重写了iScroll这个框架的原始代码.这个项目的产生完全是因为移动版webkit浏览器(诸如iPhone,iPad,Android 这些系统上广泛使用)提供了一 ...

  3. hdfs的bug纪录, Unexpected block state

      今早遇到一个bug,提交 spark job 失败.说 hdfs 在 safe mode状态,不允许创建和删除文件. 然后发现 hdfs 的日志文件不断滚动,几乎每秒钟100M的速度打日志,当时没 ...

  4. k-近邻算法python代码实现(非常全)

    1.k近邻算法是学习机器学习算法最为经典和简单的算法,它是机器学习算法入门最好的算法之一,可以非常好并且快速地理解机器学习的算法的框架与应用.它是一种经典简单的分类算法,当然也可以用来解决回归问题.2 ...

  5. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 图片:缩略图功能

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. PHP7 源码整体框架

    一.PHP7语言执行原理 常用的高级语言有很多种,根据运行的方式不同,大体分为两种:编译型语言和解释型语言. 编译是指在应用源程序执行之前,就将程序源代码“翻译”成汇编语言,然后进一步根据软硬件环境编 ...

  7. Tornado -- 7 - 查询结果

    查询结果 查询结果总结: 条件查询 多表查询

  8. mongodb- 备份和导入备份

    一.使用 mongodump 命令备份数据 mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表 -o 文件存放路径 参数说明: -h 指明数据库宿主机 ...

  9. Linux-Journal

    Linux-Journal 1. 日志简介 2. 日志的优先级和分类 2.1 优先级 2.2 设施分类 3. 命令帮助 4. 日志查看示例 5. 日志大小限制 6. 手动清理日志文件 1. 日志简介 ...

  10. 001-PHP静态变量

    <?php function ADD1() { static $a = 10; //定义静态变量 $a += 1; echo "静态变量a的值为:" . $a . " ...