How would you check for undefined property in ejs for node.js?

pvorb picture pvorb · Sep 3, 2011 · Viewed 35.4k times · Source

What is the best way to check 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?

Answer

Richard Marr picture Richard Marr · Sep 7, 2011

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"} }));