我正在尝试使用Node.js / Express.js路由加载可选的,特定于页面的样式表,但是在ejs
部分遇到了麻烦:
快递:
res.render('index', { title: 'Home', css: 'index'}); // some pages won't have the 'css' parameter.
EJS加载:
<link rel='stylesheet' href='/static/stylesheets/shared.css' />
<% if (css) { %>
<link rel='stylesheet' href='/static/stylesheets/<%- css %>.css' />
<% } %>
看官方EJS documentation,我的if陈述遵循其逻辑:
<% if (user) { %>
<h2><%= user.name %></h2>
<% } %>
我收到错误css is not defined
。按照这种逻辑,如果未定义user
,在ejs网站上给出的示例是否还会导致错误?
我在这里做什么错了?
答案 0 :(得分:1)
尝试将所有数据发送到这样的子对象中:
快递:
res.render('index', {data:{title:'Home',css:'index'}});
或
res.render('index', {data:{title:'Home'}});
EJS:
<link rel='stylesheet' href='/static/stylesheets/shared.css' />
<% if (data.css) { %>
<link rel='stylesheet' href='/static/stylesheets/<%- data.css %>.css' />
<% } %>
如果您只是发送(可选)到这样的对象上:{title:'Home',css:'index'}
或{title:'Home'}
,则可能会或可能不会定义变量css
。
您可以将支票更改为if (typeof css !== 'undefined')
,但我发现仅使用子对象会更容易,更小。