检查 EJS 模板中是否存在变量的正确方法是什么(使用 ExpressJS)?

新手上路,请多包涵

在EJS github页面上,只有一个简单的例子: https ://github.com/visionmedia/ejs

例子

<% if (user) { %>
    <h2><%= user.name %></h2>
<% } %>

这似乎是在检查名为 user 的变量是否存在,如果存在,请执行一些操作。呃,对吧?

我的问题是,如果用户变量不存在,为什么 Node 会抛出 ReferenceError ?这使得上面的例子毫无用处。检查变量是否存在的适当方法是什么?我是否应该使用 try/catch 机制并抓住那个 ReferenceError?

 ReferenceError: user is not defined
    at IncomingMessage.anonymous (eval at <anonymous> (/usr/local/lib/node/.npm/ejs/0.3.1/package/lib/ejs.js:140:12))
    at IncomingMessage.<anonymous> (/usr/local/lib/node/.npm/ejs/0.3.1/package/lib/ejs.js:142:15)
    at Object.render (/usr/local/lib/node/.npm/ejs/0.3.1/package/lib/ejs.js:177:13)
    at ServerResponse.render (/usr/local/lib/node/.npm/express/1.0.7/package/lib/express/view.js:334:22)
    at Object.<anonymous> (/Users/me/Dropbox/Projects/myproject/server.js:188:9)
    at param (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:146:21)
    at pass (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:162:10)
    at /usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:152:27
    at Object.restrict (/Users/me/Dropbox/Projects/myproject/server.js:94:5)
    at param (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:146:21)

我知道我可以通过在我的服务器代码中简单地添加一个“用户”局部变量来消除这个错误,但这里的重点是我想在运行时使用你的每天 if/else 检查这些变量的存在nullcheck 类型模式。一个不存在的变量的例外对我来说似乎很荒谬。

原文由 Aashay Desai 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 726
2 个回答

就像你对 js 中的任何东西一样, typeof foo == 'undefined' ,或者因为“locals”是包含它们的对象的名称,你可以这样做 if (locals.foo) 。这只是原始的js:p

原文由 tjholowaychuk 发布,翻译遵循 CC BY-SA 3.0 许可协议

我在某个地方读到使用 locals 并不完美,所以我想出了这样的东西,例如:

在快递文件中:

 const toRender = {
 user: false,
};
//...
if (userExists) {
 toRender.user = true;
 toRender.data = userData;
}
res.render("site", {info: toRender});

在 ejs 模板中:

 <% if (info.user) { %>
    <h2><%= info.data.name %></h2>
<% } %>

原文由 KrisNew 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题