首页 > 解决方案 > 仅使用 EJS 和 res.render 加载 JS 文件一次

问题描述

我有一个 Node.js SPA,在 JS 文件中有很多全局变量和计算,我曾经像这样为网站提供服务:

app.get('/', function(req,res) {
    res.sendFile(path.join(__dirname + '/index.html'));
});

一个带有 JS 文件的 HTML 文件加载一次,当用户单击菜单时,我使用 HTML 模板和 JS 重新渲染视图,这意味着存储所有数据的全局对象始终可用。

但是现在我想添加路由以便人们可以访问 /about 等,所以我使用 EJS 来呈现页面,唯一的问题是每次用户单击菜单项时都会加载 JS 文件,因为该文件包含在EJS 页面的脚本标签。它确实减慢了网站的速度。

应用程序.js:

router.get("/", function(req,res,next) {
    res.render("index", { page: "home" });
});

router.get("/about", function(req,res,next) {
    res.render("about", { page: "about" });
});

索引.ejs:

...
<% include partials/scripts %>
</body>
</html>

脚本.ejs:

...
<script src="js/main.js"></script>

主.js:

let WebApp = (function() {
    // global variables here
    ...

    return {
        init: function() {
            // init and calculate variables here
            // display view depending on variables
        }
    };
})();
window.onload = WebApp.init();

有什么方法可以轻松防止这种情况发生,还是我需要重组我的网站?

标签: javascriptnode.jsejs

解决方案


推荐阅读