Node写博客--添加博客分类功能(修改和删除)

1.在layout.html中加入一个【分类管理】

<ul class="nav navbar-nav">
                <li><a href="/admin/user">用户管理</a></li>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">分类管理 <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="/admin/category">分类首页</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="/admin/category/add">添加分类</a></li>
                    </ul>
                </li>
            </ul>

2.在admin.js中添加分类路由

/*
* 分类路由首页
* */
router.get('/category',function (req,res) {
    res.render('admin/category_index',{
        userInfo:req.userInfo
    });
});

3.在admin.js中添加增加分类路由

/*
* 分类的添加
* */
router.get('/category/add',function (req,res) {
    res.render('admin/category_add',{
        userInfo:req.userInfo
    });
});

4.增加category_add.html页面

{%extends 'layout.html' %}
{% block main%}
<ol class="breadcrumb">
    <li><a href="/">管理首页</a></li>
    <li><span>分类添加</span></a></li>
</ol>
<h3>分类添加</h3>

<form role="form" method="post"> <!--以post方式提交,则需要在admin.js中真假一个post路由-->
    <div class="form-group">
        <label for="name">分类名称</label>
        <input type="text" class="form-control" id="name" placeholder="请输入分类名称" name="name">
    </div>
    <button type="submit" class="btn btn-default">提交</button>
</form>

{% endblock %}

5.在admin.js中获得分类的保存

/*
* 分类的保存
* */
router.post('/category/add',function (req,res) {
    
});

6.在获得分类的保存时,需要在models中增加模型

(1)在schemas文件夹中增加categories.js

//连接数据库
var mongoose=require('mongoose');

//分类的表结构
module.exports = new mongoose.Schema({
    //分类名称
    name:String
});

(2)在models文件夹中增加Category.js

var mongoose=require('mongoose');//记载模块
//将刚刚定义好的表结构加载进来
var categoriesSchema = require('../schemas/categories');

module.exports = mongoose.model('Category',categoriesSchema);//创建模型类,将模型暴露出去

(3)在admin.js中引入模型

var Category=require('../models/Category');

//一定要加return ,不然返回会出现js和CSS加载不了的格式错误

/*
* 分类的保存
* */
router.post('/category/add',function (req,res) {
    //最好做一些相关的验证,是否为空,当提交数据不满足要求的时候,出现错误页面
    var name=req.body.name || '';
    if(name==''){
        res.render('admin/error',{
            userInfo:req.userInfo,
            message:'名称不能为空'
        });
        return;
    }
    //数据库中是否已经存在同名分类名称
    Category.findOne({
        name:name
    }).then(function (rs) {
        if(rs){
            //数据库中已经存在该分类了
            res.render('admin/error',{
                userInfo:req.userInfo,
                message:'分类已经存在了'
            });
            return;
        }else{
            //数据库中不存在该分类,可以保存
            return new Category({
                name:name
            }).save();
        }
    }).then(function (newCategory) {
        res.render('admin/success',{
            userInfo:req.userInfo,
            message:'分类保存成功',
            url:'/admin/category'
        });
    });
});

(4)增加error.html页面

{%extends 'layout.html' %}
{% block main%}
<ol class="breadcrumb">
    <li><a href="/">管理首页</a></li>
    <li><span>错误提示</span></li>
</ol>
<div class="panel panel-default">
    <div class="panel-heading">
        <h3 class="panel-title">错误提示</h3>
    </div>
    <div class="panel-body">{{message}}</div>
    <div class="panel-footer">
        {% if url %}
        <a href="{{url}}">点击这里跳转</a>
        {% else %}
        <a href="javascript:window.history.back()">返回上一步</a>
        {% endif %}
    </div>
</div>
{% endblock %}

(5)增加成功页面success.html

{%extends 'layout.html' %}
{% block main%}
<ol class="breadcrumb">
    <li><a href="/">管理首页</a></li>
    <li><span>成功提示</span></li>
</ol>
<div class="panel panel-default">
    <div class="panel-heading">
        <h3 class="panel-title">成功提示</h3>
    </div>
    <div class="panel-body">{{message}}</div>
    <div class="panel-footer">
        <a href="{{url}}">点击这里跳转</a>
    </div>
</div>
{% endblock %}

7.为博客增加修改功能,将admin.js中的分类首页,数据条数修改

/*
* 分类首页
* */
router.get('/category',function (req,res) {
    var page = Number(req.query.page || 1);//实际过程中需要判定page是否为数值
    //对page的取值进行一个限制
    var limit =10;
    var pages=0;
    //获取数据库中的数据记录的总条数
    Category.count().then(function (count) {
        //计算总页数
        pages=Math.ceil(count/limit);//向上取整
        //取值不能超过pages
        page=Math.min(page,pages);
        //取值不能小于1
        page=Math.max(page,1);

        var skip = (page-1)*limit;

        Category.find().limit(limit).skip(skip).then(function (categories) {
            res.render('admin/category_index',{
                userInfo:req.userInfo,
                categories:categories,

                count:count,
                page:page,
                pages:pages,
                limit:limit
            })
        });
    });
});

8.修改category_index.html网页

{%extends 'layout.html' %}
{% block main%}
<ol class="breadcrumb">
    <li><a href="/">管理首页</a></li>
    <li><span>分类列表</span></a></li>
</ol>
<h3>分类列表</h3>
<table class="table table-hover table-striped">

    <tr>
        <th>ID</th>
        <th>分类名称</th>
        <th>操作</th>
    </tr>
    {% for category in categories%}
    <tr>
        <td>{{category._id.toString()}}</td>
        <td>{{category.name}}</td>
        <td>
            <a href="/admin/category/edit?id={{category._id.toString()}}">修改</a> |
            <a href="/admin/category/delete?id={{category._id.toString()}}">删除</a>
        </td>
    </tr>
    {% endfor %}
</table>

<!--把另外一个页面通过引用的形式,包含子集的方式包含进来-->
{%include 'page.html'%}

{% endblock %}

9.在admin.js中增加【修改】和【删除】两个功能

(1)分类的修改,在admin.js中增加,分类修改页面

/*
* 分类修改
* */
router.get('/category/edit',function (req,res) {
    //获取要修改的分类信息,并且用表单的形式展现出来
    var id=req.query.id || '';
    //获取要修改的分类信息
    Category.findOne({
         _id:id //一定要写全
    }).then(function (category) {
        if(!category){
            res.render('admin/error',{
                userInfo:req.userInfo,
                message:'分类信息不存在'
            });
        }else{
            res.render('admin/category_edit',{
                userInfo:req.userInfo,
                category:category
            });
        }
    });
});

(2)分类修改增加以后,再对分类的修改进行保存

/*
* 分类修改的保存
* */
router.post('/category/edit',function (req,res) {
    //获取要修改的分类信息,并且用表单的形式展现出来
    var id=req.query.id || '';
    //获取post提交过来的名称
    var name=req.body.name||'';
    //获取要修改的分类信息
    Category.findOne({
        _id:id //一定要写全
    }).then(function (category) {
        if(!category){
            res.render('admin/error',{
                userInfo:req.userInfo,
                message:'分类信息不存在'
            });
            return Promise.reject();
        }else{
            //当用户没有做任何修改提交的时候
            if(name==category.name){
                res.render('admin/success',{
                    userInfo:req.userInfo,
                    message:'修改成功',
                    url:'/admin/category'
                });
                return Promise.reject();//阻止默认行为
            }else{
                //要修改的分类名称是否已经在数据库中存在
                return Category.findOne({
                    _id:{$ne:id},
                    name:name
                });
            }

        }
    }).then(function (sameCategory) {
        if(sameCategory){
            res.render('admin/error',{
                userInfo:req.userInfo,
                message:'数据库中已经存在同名分类'
            });
            return Promise.reject();
        }else{
           return Category.update({
                _id:id
            },{
                name:name
            });
        }
    }).then(function () {
        res.render('admin/success',{
            userInfo:req.userInfo,
            message:'修改成功',
            url:'/admin/category'
        });
    });
});

(3)增加分类的删除

/*
* 分类删除
* */
router.get('/category/delete',function (req,res) {
    //获取要删除的分类的id
    var id=req.query.id||'';
    Category.remove({
        _id:id
    }).then(function () {
        res.render('admin/success',{
            userInfo:req.userInfo,
            message:'删除成功',
            url:'/admin/category'
        })
    })
});

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值