Advertisement

博客项目——用户文章列表展示

阅读量:

服务器端添加路由
home路由文件(home.js)
这里home是一级路由,index.js(用户文章界面展示),article.js(文章详情)是二级路由

复制代码
    //引入express服务器
    const express = require('express');
    //创建路由对象
    const home = express.Router();
    //文章列表封面
    home.get('/', require('./home/index'));
    //文章详情封面
    home.get('/article', require('./home/article'));
    
    module.exports= home;
    
    
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

文章列表页面(index.js)
这里通过先转化为字符串后解析为JSON对象的方式解决数组溢出栈问题,否则调用res.render方法渲染数据到模板会报错
参考博客:

复制代码
    //引入文章构造集合用于将文章内容渲染到模板
    const { Article } = require('../../model/article');
    //引入mongoose-sex-page(数据库性分页)
    const pagination = require('mongoose-sex-page');
    module.exports =async (req, res) => {
       //文章列表界面
    //这里find可以写在指定查询分页条件后,也可以在display后 populate级联查询到用户集合最后不要忘了exec执行
    let article = await pagination(Article).find().page(1).size(4).display(5).populate('author').exec();
    // let articles =await Article.find({}).populate("author").lean();
    //这里通过先转化为字符串后解析为JSON对象的方式解决数组溢出栈
    var str = JSON.stringify(article);
    let articles = JSON.parse(str);
    res.render('home/default.art', {
        articles:articles
    });
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

文章详情页面
当前只渲染了模板到页面,之后会对内容做进一步补充

复制代码
    module.exports = (req, res) => {
    //显示详情界面
        res.render('home/article.art');
    
    }
    
    
      
      
      
      
      
    
    AI写代码

用户文章页面展示(default.art)
将index.js传递数据渲染到模板
调用dateFormat对日期进行处理
运用正则表达式对文章内容标签进行处理成’’’@原文输出(处理 )substr截取防止内容超出盒子

复制代码
    		<!-- 文章列表开始 -->
    	<ul class="list w1100">
    		{{each articles.records}}
    		<li class="{{$index%2 == 0 ?'fl' : 'fr'}}">
    			<a href="article.html" class="thumbnail">
    				<img src="{{$value.cover}}">
    			</a>
    			<div class="content">
    				<a class="article-title" href="article.html">{{$value.title}}</a>
    				<div class="article-info">
    					<span class="author">{{$value.author.username}}</span>
    					<!-- 调用dateFormat对日期进行处理 -->
    					<span>{{dateFormat($value.publishDate)}}</span>
    				</div>
    				<div class="brief">
    					<!--运用正则表达式对文章内容标签进行处理成'''@原文输出(处理&npsb)substr截取
    					防止内容超出盒子-->
    					{{@$value.content.replace(/<[^>]+>/g , '').substr(0,100)+'...' }}
    				</div>
    			</div>
    		</li>
    		{{/each}}
    	</ul>
    	<!-- 文章列表结束 -->
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

分页跳转

客户端页面呈现模板(default.art

复制代码
    在这里插入代码片
    
    	<!-- 分页开始 -->
    	<div class="page w1100">
    		<!-- 如果当前页大于1,显示上一页标签 -->
    		{{if articles.page > 1}}
    		<a href="/home?page={{articles.page-1}}">上一页</a>
    		{{/if}}
    
    		{{each articles.display}}
    		<!-- 如果当前页和value相等 则添加active属性-->
    		<a href="/home?page={{$value}}" class="{{$value==articles.page? 'active' : ''}}">{{$value}}</a>
    		{{/each}}
    
    		<!-- 如果当前页小于最大页(临界是等于),显示下一页标签 -->
    		{{if articles.page < articles.pages}}
    		<a href="/home?page={{articles.page-0+1}}">下一页</a>
    		{{/if}}
    	</div>
    	<!-- 分页结束 -->
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

服务器端(index.js)
接收客户端get传递的请求参数,并将page用于数据库分页

复制代码
    //引入文章构造集合用于将文章内容渲染到模板
    const { Article } = require('../../model/article');
    //引入mongoose-sex-page(数据库性分页)
    const pagination = require('mongoose-sex-page');
    module.exports =async (req, res) => {
       //文章列表界面
    const page = req.query.page;
    //这里find可以写在指定查询分页条件后,也可以在display后 populate级联查询到用户集合最后不要忘了exec执行
    let article = await pagination(Article).find().page(page).size(4).display(5).populate('author').exec();
    // let articles =await Article.find({}).populate("author").lean();
    //这里通过先转化为字符串后解析为JSON对象的方式解决数组溢出栈
    var str = JSON.stringify(article);
    let articles = JSON.parse(str);
    res.render('home/default.art', {
        articles:articles
    });
    }
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

问题

复制代码
    const pagination = require('mongoose-sex-page');
    module.exports =async (req, res) => {
       //文章列表界面
    //这里find可以写在指定查询分页条件后,也可以在display后 populate级联查询到用户集合最后不要忘了exec执行
    let article = await pagination(Article).find().page(1).size(4).display(5).populate('author').exec();
    // let articles =await Article.find({}).populate("author").lean();
    //这里通过先转化为字符串后解析为JSON对象的方式解决数组溢出栈
    var str = JSON.stringify(article);
    let articles = JSON.parse(str);
    
    
      
      
      
      
      
      
      
      
      
    
    AI写代码

这里用到级联查询,author查询出的是一个用户数据集合,调用res.render方法渲染数据到模板会报错,应该是数据格式问题,涉及到函数嵌套调用导致溢出。通过先转化为字符串后解析为JSON对象的方式解决数组溢出栈问题

问题2
在这里插入图片描述
这里home前不应该有/(因为/代表绝对路径)我们已经告知.art文件在views下,刚好两个文件(home和admin);否则会显示找不到该文件

全部评论 (0)

还没有任何评论哟~