NodeJS实战 利用Express&MongoDB搭建博客(5)后台管理实现

235 阅读2分钟

用户列表

    /routers/admin.js

/**
 * 用户管理
 */
router.get('/user',function (req,res) {
    /**
     * 从数据库读取所有用户数据
     */
    User.find().then(function (users) {
        res.render('admin/user_index',{
            userInfo:req.userInfo,
            users:users
        });
    });

});

    /views/admin/user_index.js

{% extends 'layout.html' %}
{% block main %}
<ol class="breadcrumb">
    <li><a href="/">管理首页</a></li>
    <li><span>用户列表</span></li>
</ol>
<h3>用户列表</h3>
<table class="table table-hover table-striped">
    <tr>
        <th>ID</th>
        <th>用户名</th>
        <th>密码</th>
        <th>是否管理员</th>
    </tr>
    {% for user in users %}
    <tr>
        <td>{{user._id.toString()}}</td>
        <td>{{user.username}}</td>
        <td>{{user.password}}</td>
        <td>
            {%if user.isAdmin%}
            是
            {%endif%}
        </td>
    </tr>
    {% endfor %}
</table>
{% endblock %}

    分页展示

    /routers/admin.js

router.get('/user',function (req,res) {
    /**
     * 从数据库读取所有用户数据
     * limit(Number):限制获取的数据条数
     * skip(Number):忽略数据的条数
     * 每页显示两条
     * 1:1-2 skip(0)->  0 =(当前页-1)*limit
     * 2:3-4 skip(2)
     */
    var page = req.query.page || 1;
    var limit = 2;
    var skip = (page-1)*limit;
    User.find().limit(limit).skip(skip).then(function (users) {
        res.render('admin/user_index',{
            userInfo:req.userInfo,
            users:users,

            page:page
        });
    });

});

分类管理

    分类首页

    /views/admin/category_index.html

{% extends 'layout.html' %}
{% block main %}
<ol class="breadcrumb">
    <li><a href="/">管理首页</a></li>
    <li><span>分类列表</span></li>
</ol>
<h3>分类列表</h3>
<table class="table table-hover table-striped">
    <tr>
        <th>ID</th>
        <th>用户名</th>
        <th>密码</th>
        <th>是否管理员</th>
    </tr>
    <!--{% for user in users %}
    <tr>
        <td>{{user._id.toString()}}</td>
        <td>{{user.username}}</td>
        <td>{{user.password}}</td>
        <td>
            {%if user.isAdmin%}
            是
            {%endif%}
        </td>
    </tr>
    {% endfor %}-->
</table>
{%include 'page.html'%}
{% endblock %}

     /routers/admin.js

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

    添加分类

     /views/admin/category_add.html

{% extends 'layout.html' %}
{% block main %}
<ol class="breadcrumb">
    <li><a href="/">管理首页</a></li>
    <li><span>分类添加</span></li>
</ol>
<h3>分类添加</h3>
<form role="form" method="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 %}

    /routers/admin.js

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

    分类保存

    /schemas/categories.js

var mongoose = require('mongoose');

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

    /models/Category.js

 

var mongoose = require('mongoose');
var categoriesSchema = require('../schemas/categories');

module.exports = mongoose.model('Category',categoriesSchema);

    /views/admin/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 %}

     /views/admin/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">
        {%if url%}
        <a href="{{url}}">点击这里跳转</a>
        {%else%}
        <a href="javascript:window.history.back();">返回上一步</a>
        {%endif%}
    </div>
</div>
{% endblock %}

457

 

    /routers/admin.js

var Category = require('../models/Category');
/.../
/**
 * 分类保存
 */
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 Promise.reject();
        }else {
            //分类不存在
            return new Category({
                name:name
            }).save();
        }
    }).then(function (newCategory) {
        res.render('admin/success',{
            userInfo:req.userInfo,
            message:'分类保存成功',
            url:'/admin/category'
        });
    })
});