Na stronie github EJS jest jeden i tylko jeden prosty przykład: https://github.com/visionmedia/ejs
Przykład
<% if (user) { %>
<h2><%= user.name %></h2>
<% } %>
Wygląda na to, że sprawdza istnienie zmiennej o nazwie user, a jeśli istnieje, zrób coś. Duh, prawda?
Moje pytanie brzmi: dlaczego na świecie Node miałby wyrzucać ReferenceError, jeśli zmienna użytkownika nie istnieje? To sprawia, że powyższy przykład jest bezużyteczny. Jaki jest właściwy sposób sprawdzania istnienia zmiennej? Czy mam użyć mechanizmu try / catch i pobrać ten błąd 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)
Rozumiem, że mógłbym usunąć ten błąd, po prostu dodając zmienną lokalną „user” w kodzie mojego serwera, ale chodzi o to, że chcę sprawdzić istnienie takich zmiennych w czasie wykonywania, używając każdego dnia, jeśli / else wzorzec typu nullcheck. Wyjątek dla zmiennej, która nie istnieje, wydaje mi się śmieszny.