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

35 篇文章 0 订阅
17 篇文章 0 订阅

修改文章数据结构

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

 

 内容分页展示

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,可以用于开发服务器端的应用程序。ExpressNode.js的一个快速、灵活和极简的Web应用程序框架。MongoDB是一个面向文档的NoSQL数据库。它将数据存储在JSON样式的文档中,具有强大的灵活性和可扩展性。 在Node.js中使用MongoDB,可以使用node-mongodb-native驱动程序。首先需要安装MongoDB,并确保其服务正在运行。然后,可以使用Monk库来实现Node.js和MongoDB的交互[2]。使用Monk,你可以使用简单的JavaScript代码来连接到MongoDB数据库,执行查询和更新操作。 下面是一个使用Monk连接到MongoDB的示例代码: ``` var mongo = require('mongodb'); var monk = require('monk'); var db = monk('localhost:27017/nodetest1'); ``` 在上述代码中,我们使用`monk`模块连接到本地的`nodetest1`数据库。 通过使用Node.js、ExpressMongoDB,你可以构建强大的Web应用程序,实现数据的存储和检索功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [NodeJS+Express+MongoDB](https://blog.csdn.net/weixin_33712881/article/details/85842769)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Node.js + Express + MongoDB教程](https://blog.csdn.net/boleban/article/details/39134661)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值