【问题标题】:Express js and serving static files for viewsExpress js 并为视图提供静态文件
【发布时间】:2018-08-07 04:51:54
【问题描述】:

我的项目中有多个视图,比如说:“view1”、“view2”、“view3”。 视图引擎是“ejs”。对于这些视图,我有不同的脚本/css 文件。我还有部分内容,例如:header.ejs 和 footer.ejs,我将它们包含在视图(页眉)和底部(页脚)的顶部:

如图所示,view1.ejs 使用两个样式表(styleA,styleB)和脚本(scriptA,scriptB)。

当我要对这些静态文件使用另一个视图时,一切都很好,因为我在视图中包含了 header.ejs 和 footer.ejs。

但是由于我对另一个视图使用不同的样式表和脚本,并且我不想包含“styleA”和“styleB”,所以我遇到了问题。我只想保留相同的部分页眉和页脚,但里面有另一个链接。

是否有任何“资产管理器”或其他解决方案来管理所有这些链接?

当我想在超过 20 页中使用 header.ejs 时,事情变得复杂了,因为没有解决我的问题,我需要包含所有链接/样式,其中一些不是必需的。

【问题讨论】:

  • 不确定,但如果您可以将一些额外的数据传递给您的视图,那么您可以根据其价值加载这些资产。

标签: node.js express model-view-controller assets ejs


【解决方案1】:

在 express 中,您可以将样式和脚本作为数组传递来呈现您的 ejs 模板:

app.get('/', function (req, res) {
  res.render('index', { styles: ['styleA.css', 'styleB.css'], scripts: ['scriptA.js', 'scriptB.js']});
});

现在更新您的 ejs 模板。首先是样式部分:

<% styles.forEach(function(sty){ %>
   <link href="<%- sty %>" rel="stylesheet">
<% });%>

然后,脚本部分:

<% scripts.forEach(function(scr){ %>
  <script src="<%- scr %>"></script>
<% });%>

【讨论】:

  • 这是很好的解决方案,谢谢!