ajax实现分页(响应html页面,sendFile;响应json数据)客户端渲染
作者:互联网
vscode:
html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
* {margin:0; padding: 0;}
li {list-style: none;}
body {background: #eee;}
.wrapper {background: #fff;width: 970px; margin:20px auto; padding: 15px;}
h1 {text-align: center; border-bottom: 1px solid #ddd; padding-bottom: 20px;}
li {margin:20px 0; border-bottom: 1px dotted #eee; padding-bottom: 20px;}
p { line-height: 25px;}
</style>
<script src="/jquery-1.11.3.js"></script>
</head>
<body>
<div class="wrapper">
<h1>新闻列表(AJAX普通分页)<script>document.write(new Date().toLocaleString())</script></h1>
<ul>
</ul>
<div class="footer">
<p>总共有<span id="total"></span>条新闻,每页显示<span id="pagesize"></span>条,
当前是<span id="page"></span>/<span id="size"></span>页
<a href="#" id="prev">上一页</a>
<a href="#" id="next">下一页</a>
</p>
</div>
</div>
<script>
let page = 1; // 默认是第1页
function getNewsList(page) {
$.get("/news",{page},res=>{
// console.log(res)
let str ="";
// 客户端渲染,客户端自己通过ajax获取数据,自已渲染数据
res.news.forEach(item=>{
str += `
<li>
<h2><a href="#">${item.title}</a></h2>
<p class="time">${item.time}</p>
<p class="summary">${item.summary}</p>
</li>
`
})
$("ul").html(str)
$("#total").html(res.total)
$("#pagesize").html(res.pageSize)
$("#page").html(res.page)
$("#size").html(res.size)
})
}
getNewsList(page); // 一上来就获取第1页的数据
$("#prev").click(function (e) {
// 阻止默认事件
e.preventDefault();
if(page>1){
getNewsList(--page);
}
});
$("#next").click(function (e) {
// 阻止默认事件
e.preventDefault();
if(page<$("#size").html()){
getNewsList(++page);
}
});
</script>
</body>
</html>
js
let express = require("express");
let path = require("path");
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
let app = express();
// 托管静态资源
app.use(express.static(path.resolve(__dirname, "./public")))
// 当访问/ 响应一个html页面,不是渲染模板
app.get("/",(req,res)=>{
res.sendFile(path.resolve(__dirname,"./views/index.html"))
})
// 当访问/news 响应一个json数据
// 如果一个路由,返回了一个Json数据,我们叫http://localhost:3000/news是api接口
// api:1)别人封装的方法,我们直接去调用 2)指一个url地址 叫api接口
app.get("/news",(req,res)=>{
let page = req.query.page || 1; // page表示当前是第几页
// page如果小于等于0
(page <= 0) && (page = 1)
// console.log(page)
let pageSize = 3; // 每页显示多少条
let offset = (page-1)*pageSize;
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db("news");
dbo.collection("newslist").find({}).skip(offset).limit(pageSize).toArray(function(err, result) {
if (err) throw err;
// console.log(result); // 获取每一页的数据
dbo.collection("newslist").count().then(result2=>{
// result2表示一共有多少条数据
let total = result2;
let size = Math.ceil(total / pageSize)
// 服务端渲染: 核心是使用模板引擎 jsp php asp out
// 是把模板和数据柔和在一起,形成一个有真实数据的页面,响应给客户端
res.json({
news:result,
total, // 总共多少条数据
pageSize, // 每页显示多少条
page, // 当前是第几页
size, // 一菜有多少页
})
});
db.close();
});
});
})
app.listen(3000,()=>{
console.log("3000 ok~")
})
标签:sendFile,err,res,响应,json,html,let,news,page 来源: https://blog.csdn.net/QZ9420/article/details/110343271