Как правильно проверить наличие переменной в шаблоне EJS (с использованием ExpressJS)?

На странице GitHub EJS есть один-единственный простой пример: https://github.com/visionmedia/ejs

Пример

<% if (user) { %>
    

<%= user.name %>

<% } %>

Похоже, это проверка на существование переменной с именем user, и, если она существует, сделайте что-нибудь. Ага, верно?

У меня вопрос, с какой стати Node выдает ошибку ReferenceError, если пользовательская переменная не существует? Это делает приведенный выше пример бесполезным. Как лучше всего проверить наличие переменной? Ожидается ли, что я буду использовать механизм try / catch и получить эту ошибку ReferenceError?

ReferenceError: user is not defined
    at IncomingMessage.anonymous (eval at  (/usr/local/lib/node/.npm/ejs/0.3.1/package/lib/ejs.js:140:12))
    at IncomingMessage. (/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. (/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. Мне кажется смешным исключение для несуществующей переменной.

105
задан Aashay Desai 21 March 2011 в 00:09
поделиться