在 EJS 的 github 页面上,只有一个简单的示例:
https://github.com/visionmedia/ejs示例
<% if (user) { %>
<h2><%= user.name %></h2>
<% } %>
看起来这是在检查名为"user"的变量是否存在,如果存在,则执行一些操作。 显然,对吧?
我的问题是,为什么如果"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空值检查类型模式在运行时检查这些变量的存在。对于不存在的变量的异常对我来说似乎很荒谬。
alert
是浏览器的window
对象的一部分,不可在 node.js 中使用。替代方案是console.log
,但我不确定它是否在 ejs 模板中可用,除非您通过locals
传递它。 - Zikeslocals
对象中存在user
属性,则执行花括号内的代码。"FTW"可能表示"For The Win",表示肯定的情感或赞美。 - s2t2