如何使用jQuery、Express和Handlebar创建无刷新页面?

我正在学习Express JS,我的问题是:我想使用NodeJS创建两个页面,这两个页面使用Handlebar作为模板引擎,但我希望第一个页面应该使用res.render('home')发送,第二个页面应该由jQuery使用AJAX调用来调用以从Express服务器获得呈现为HTML的响应,然后加载一个关于页面而不刷新。我尝试使用this StackOverflow question中所示的方法,但我不满意。请指导我怎样才能做到这一点。


解决方案

伙计们,我终于找到了我的问题的答案,我希望它也能帮助你们。一个接一个地按照这些步骤来创建一个使用jQuery、Express和Handlebar的无刷新网站。这只是一个关于多个事物组合的教程。

1.创建名为MyWebSite的文件夹

2.运行npm init并安装以下依赖项

    "express-handlebars": "^5.3.4",
    "handlebars": "^4.7.7",
    "hbs": "^4.1.2"

3.现在使用以下代码创建一个main.js文件

const express = require('express')
const app = express();
const static_path = __dirname + "/static"
const hbs = require("hbs");

app.set('view engine', 'hbs');
app.set("views", __dirname + "/pages");

app.use(express.static(static_path));

var exhb = require('express-handlebars').create();

app.get("/", (req, res) => {
    res.render('index', { title: "Home Test", pagename: "This is my Home page" });
});

app.get('/getabout', (req, res) => {
    exhb.render("pages/about.hbs", { title: "About US page", body: "Body" }).then((html) => {
        res.send({ data: html });
    }).catch((err) => {
        console.log(err);
    })
});

app.listen(8080, 'localhost', () => {
    console.log("listening at http://localhost:8080")
})

4.现在创建一个包含文件index.js的静态文件夹,并编写以下代码

async function callAbout() {
    let data = await fetch('http://localhost:8080/getabout');
    let response = await data.json();
    console.log(response);
    $("html").html(response['data']);
    window.history.pushState(
        'about us',
        'About us',
        '/aboutus');
}

5.现在创建一个包含两个文件的Pages文件夹index.hbsabout.hbsindex.hbs将包含以下代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{title}}</title>
</head>
<body>
    <h1>{{pagename}}</h1>
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Sint assumenda aliquam dolor consectetur recusandae possimus illo praesentium atque nihil exercitationem!
    <button onclick="callAbout()">About us</button>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script src="./index.js"></script>
</body>
</html>

about.hbs将包含以下代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{title}}</title>
</head>

<body>
<h1>This is my about us page created using NODE</h1>
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Explicabo accusamus autem accusantium suscipit, minima blanditiis ducimus quisquam fugiat, eligendi repellendus provident quasi dolores nesciunt laboriosam commodi illum repellat error eos.
{{body}}
</body>

</html>

6.现在运行node.js并单击About Us按钮,即可看到神奇的

希望本教程能帮助任何想要完成新任务的人

相关文章