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

2024-04-11

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

Example

<% 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 类型模式。不存在的变量的例外对我来说似乎很荒谬。


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐