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'
})
})
});