博客项目——用户文章列表展示
发布时间
阅读量:
阅读量
服务器端添加路由
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)
还没有任何评论哟~
