Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 611
pvorb Avatar asked Sep 02 '11 22:09

pvorb


People also ask

How do you check if a value is undefined in node JS?

In a JavaScript program, the correct way to check if an object property is undefined is to use the typeof operator. If the value is not defined, typeof returns the 'undefined' string.

What is undefined property in JavaScript?

The undefined property indicates that a variable has not been assigned a value, or not declared at all.

How do you know if it is node JS?

To see if Node is installed, open the Windows Command Prompt, Powershell or a similar command line tool, and type node -v . This should print the version number so you'll see something like this v0. 10.35 . Test NPM.


1 Answers

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"} })); 
like image 102
Richard Marr Avatar answered Sep 24 '22 11:09

Richard Marr