node.js EJS-多次使用的部分数据



我正在寻找有关nodejs项目的建议。我为一个侧边栏做了一个部分,它需要一些用户数据才能显示在上面。这个侧边栏在我的项目中的许多页面上都被多次使用。为了将用户数据发送到分部,我总是需要将其包含在我呈现使用侧边栏的页面的每个函数中。

我现在正在寻找一个更好的解决方案,让我把数据放在一个地方,分部可以在每个使用侧边栏的页面上使用这些数据。

使用nodejs/express/ejs组合,这种方法可能吗?还是我在寻找不可能的方法?

示例代码来说明我的问题:

部分(侧边栏(:

<ul id="sidebarnav">
<% if(user) { %>
<li class="user-pro">
<ul aria-expanded="false" class="collapse">
<li><a href="/user/profile?id=<%= user.uuid %>"><i class="ti-user"></i> My Profile</a></li>
<li><a href="/auth/logout"><i class="fa fa-power-off"></i> Logout</a></li>
</ul>
</li>
<% } %>
<% if(user && user.permission.includes("ADMINISTRATION")) { %>
<li>
<a class="waves-effect waves-dark" href="/system/users" aria-expanded="false">
<i class="ti-user"></i>
<span class="hide-menu">Users</span>
</a>
</li>
<% } %>
</ul>

使用侧边栏的页面部分:

router.get("/", authMiddleware.checkAuth, (req, res) => {
res.render("app/index", {
user: req.session.user
});
});
router.get("/system/users", authMiddleware.checkAuth, (req, res) => {
res.render("app/system/users", {
user: req.session.user
});
});

我可以建议两个改进:

  • EJS有一个包含系统,基本上将模板嵌入到模板中。这使得您可以简单地包含侧边栏代码,而不是一遍又一遍地复制侧边栏代码
  • 在服务器端,您可以有一个简单的";效用;函数添加";默认";数据到渲染:
function getDefaultData(req) {
return { user: req.session.user; };
}
router.get("/", authMiddleware.checkAuth, (req, res) => {
res.render("app/index", getDefaultData(req));
});
router.get("/system/users", authMiddleware.checkAuth, (req, res) => {
res.render("app/system/users", {
...getDefaultData(req), // Inject all the default data
users: getAllUsers(), // Add data specific to this page
});
});

最新更新