NodeJS实战 利用Express&MongoDB搭建博客(9)内容信息扩展及首页显示

修改文章数据结构

    /schemas/contens.js

var mongoose = require('mongoose');

//内容数据结构
module.exports = new mongoose.Schema({
    //关联字段-分类的id
    category:{
        type:mongoose.Schema.Types.ObjectId,
        //引用
        ref:'Category'
    },
    //内容标题
    title:String,
    //关联字段-用户id
    user:{
        type:mongoose.Schema.Types.ObjectId,
        //引用
        ref:'User'
    },
    //添加时间
    addTime:{
        type:Date,
        default:new Date()
    },
    //阅读量
    views:{
        type:Number,
        default:0
    },
    //内容简介
    description:{
        type: String,
        default:''
    },
    //内容
    content:{
        type:String,
        default: ''
    }
});

文章保存时保存作者

    /routers/admin.js

/**
 * 内容保存
 */
router.post('/content/add',function (req,res) {
    if(req.body.category==''){
        res.render('admin/error',{
            userInfo:req.userInfo,
            message:'分类不能为空'
        });
        return;
    }
    if(req.body.title==''){
        res.render('admin/error',{
            userInfo:req.userInfo,
            message:'标题不能为空'
        });
        return;
    }
    new Content({
        category: req.body.category,
        title:req.body.title,
        user: req.userInfo._id.toString(),
        description:req.body.description,
        content:req.body.content
    }).save().then(function (rs) {
        res.render('admin/success',{
            userInfo:req.userInfo,
            message:'内容保存成功',
            url:'/admin/content'
        });
    });

});

    /views/admin/content_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>
        <th>添加时间</th>
        <th>阅读量</th>
        <th>操作</th>
    </tr>
    {% for content in contents %}
    <tr>
        <td>{{content._id.toString()}}</td>
        <td>{{content.category.name}}</td>
        <td>{{content.title}}</td>
        <td>{{content.user.username}}</td>
        <!--使用过滤器-->
        <td>{{content.addTime|date('Y-m-d H:i:s',-8*60)}}</td>
        <td>{{content.views}}</td>
        <td>
            <a href="/admin/content/edit?id={{content._id.toString()}}">修改</a>
            <a href="/admin/content/delete?id={{content._id.toString()}}">删除</a>
        </td>
    </tr>
    {% endfor %}
</table>
{%include 'page.html'%}
{% endblock %}

NodeJS实战 利用Express&MongoDB搭建博客(9)内容信息扩展及首页显示

 

 内容分页展示

    /routers/main.js

var express = require('express');
var router = express.Router();
var Category = require('../models/Category');
var Content = require('../models/Content');
/**
 * 首页
 */
router.get('/',function (req,res,next) {

    var data = {
        userInfo:req.userInfo,
        categories:[],

        count:0,
        page : Number(req.query.page || 1),
        limit : 10,
        pages : 0
    }

    //读取所有分类
    Category.find().then(function (categories) {
        data.categories = categories;

        return Content.count();
    }).then(function (count) {
        data.count = count;

        //计算总页数
        data.pages = Math.ceil(data.count / data.limit);
        //取值不能超过pages
        data.page = Math.min( data.page, data.pages );
        //取值不能小于1
        data.page = Math.max( data.page, 1 );

        var skip = (data.page - 1) * data.limit;

        return Content.find().limit(data.limit).skip(skip).populate(['category','user']).sort({
            addTime:-1
        });
    }).then(function (contents) {
        data.contents = contents;
        res.render('main/index',data);
    });
});

module.exports = router;

    /views/main/index.html

{%extends 'layout.html'%}

{%block content%}
    {%for content in contents%}
    <div class="listBox">
        <h1>{{content.title}}</h1>
        <p class="colDefault">
            作者:<span class="colInfo">{{content.user.username}}</span> -
            时间:<span class="colInfo">{{content.addTime|date('Y年m月d日 H:i:s', -8*60)}}</span> -
            阅读:<span class="colInfo">{{content.views}}</span> -
            评论:<span class="colInfo">{{content.comments.length}}</span>
        </p>
        <dfn><p>{{content.description}}</p></dfn>
        <div class="function"><a href="/view?contentid={{content.id}}">阅读全文</a></div>
    </div>
    {%endfor%}

    <div class="pager">
        <ul class="clear">

            <li class="previous">

                {%if page <= 1%}
                <span>没有上一页了</span>
                {%else%}
                <a href="/?category={{category}}&page={{page-1}}">上一页</a>
                {%endif%}

            </li>

            {%if pages > 0%}
            <li>
                <strong>{{page}} / {{pages}}</strong>
            </li>
            {%endif%}

            <li class="next">

                {%if page >= pages%}
                <span>没有下一页了</span>
                {%else%}
                <a href="/?category={{category}}&page={{page+1}}">下一页</a>
                {%endif%}

            </li>

        </ul>
    </div>
{%endblock%}

NodeJS实战 利用Express&MongoDB搭建博客(9)内容信息扩展及首页显示