一,前台显示 /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. Java导出Excel(项目实战Demo)

    Controller 层 /** * 考勤机刷卡明细导出Excel * * @throws Exception */ // @RequiresPermissions("report:Expo ...

  2. 嵊州普及Day3T1

    题意:n座山,每天袭击k面,不能为同一座.问最少几天袭击所有山两面. 思路:不管如何,n,k<=10,做了就能过,考试时先想的暴力模拟,后来发现有规律,看看就好了. 见代码: #include& ...

  3. 4K对齐

    4K对齐这个概念常常与固态硬盘联系起来.买了一块固态硬盘,装机过程中时有忽略4K对齐这个小细节,但是这个小细节往往十分重要,它影响硬盘的使用寿命和速度. 现在来了解一下4K对齐到底是个什么东西. 一. ...

  4. python-python基础6(面向对象)

    一.面向对象编程 编程范式 编程是 程序 员 用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马 ...

  5. Linux之关于用户的几个重要配置文件

    . /etc/skel/ 用来存放新用户配置文件(环境变量)的目录,当创建新用户时,系统会把当下目录的所有文件拷贝一份到新用户家目录中,即:cp -a /etc/skel/* /home/ddu 2. ...

  6. 如果shell到win上出现乱码怎么办

    如果shell到win上出现这样的乱码怎么办? 如果出现了乱码,不慌一条命令搞定它!!! chcp 65001

  7. Fiddler抓取HTTP请求。

    参考链接:http://blog.csdn.net/ohmygirl/article/details/17849983/ http://www.cnblogs.com/kingwolf_JavaScr ...

  8. css滚动

    css 滚动transform: translateY(-100px);jquery $(box).height(); //获取元素高度$(box).scrollTop();//获得元素的滚动条高度

  9. python笔记10

    今日内容 参数 作用域 函数嵌套 知识点回顾 函数基本结果 def func(name,age,email): # 函数体(保持缩进一致) a = 123 print(a) return 1111#函 ...

  10. java不要登录发送邮件noReply

    最近在工作中遇到一个问题: 客户需要让我们的系统给他们发邮件,但是不给我们提供用户密码. 这样就导致一个问题,即,一般我们使用的都是smtp方式发邮件,发邮件的时候必须登录,虽然可以修改发件人的邮箱名 ...