How would you check for undefined property in ejs for node.js?
What is the best way to check 开发者_Go百科for an undefined property in an ejs template?
(I'm using the node.js package by TJ Holowaychuk)
Example:
var tpl = '<% if (foo) { %>foo defined<% } else { %>foo undefined<% } %>';
console.log(ejs.render(tpl, { locals: { bar: "baz" } }));
I'd expect this to render "foo undefined". It does throw an foo undefined error instead.
I know that this is not supposed to be an issue, since this is expected behavior in the tests. Is there an easy way to avoid this?
The only solution I found is using the hasOwnProperty
method.
var tpl = '<% if (hasOwnProperty("foo")) { %>foo defined<% } else { %>foo undefined<% } %>';
console.log(ejs.render(tpl, { locals: { bar: "baz"} }));
This doesn't throw any errors.
Is there a better way to keep the template clean? Or why does it throw this error?
Another way to test for a property is to reference it indirectly via the locals
object. Using your example:
var tpl = '<% if(locals.foo){ %>foo defined<% }else{ %>foo undefined<% } %>';
console.log(ejs.render(tpl, { locals: { bar: "baz"} }));
I would use typeof
, as in if (typeof foo == 'undefined')
. I use the typeof
operator with the string "undefined", whereas some people might do a direct comparison with the undefined
global variable. I prefer this method because it is protected against some terrorist JS library developer changing the value of the global variable, leaving your code broken.
This could also be expressed as a ternary, which some view as "cleaner" due to the absence of curlies:
var tpl = '<% (typeof foo != "undefined" ? %>foo defined<% : %>foo undefined<% ) %>';
Simplest, and cleanest in my opinion:
<%= (!!locals.foo)?foo:'' %>
Earlier version of EJS supports only locals
But
Now in the latest versions of EJS support res.locals
Sample with ternary operator -
<%= (res.locals.foo)?"foo":"" %>
Sample with if-else -
<% if (res.locals.urvariable) { %>
<h1><%= urvariable.value1 %></h1>
<% } else { %>
<h1><%= urvariable.value2 %></h1>
<% } %>
精彩评论