ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ajax实现分页(响应html页面,sendFile;响应json数据)客户端渲染

2020-11-29 18:02:34  阅读:196  来源: 互联网

标签:sendFile err res 响应 json html let news page


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有