在EJS github上頁,有一個且只有一個簡單的例子: https://github.com/visionmedia/ejs在EJS模板(使用ExpressJS)中檢查變量是否存在的正確方法是什麼?
例
<% if (user) { %>
<h2><%= user.name %></h2>
<% } %>
這似乎是檢查一個變量命名用戶的存在,並且如果存在,做一些東西。杜,對嗎?
我的問題是,爲什麼世界上會拋出一個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類型模式。一個不存在的變量的例外對我來說似乎很荒謬。
我開始懷疑自己手上是否有更大的問題。這也會引發參考錯誤:<%alert('test'); %> – 2011-03-21 00:34:58
@Aashay'alert'是瀏覽器的'window'對象的一部分,並且在node.js中不可用。替代方法是'console.log',但我不知道它是否可以在ejs模板中使用,除非您通過'locals'傳遞它。 – Zikes 2011-03-23 17:10:17
@Zikes在這種情況下,我正在尋找EJS,所以它在瀏覽器頁面上。但是,就像TJ說的那樣,typeof foo =='undefined'起作用。我瞭解到,如果foo已被定義但是爲空或空,我還可以添加一個簡單的!! foo。 – 2011-06-27 06:23:58