Как условно отобразить переменные с помощью EJS

#ejs

#ejs

Вопрос:

Этот вопрос может показаться повторяющимся, но проверка связанных вопросов не дала удовлетворительных ответов. Есть ли лучший способ вывода (записи) переменных в EJS, отличный от обычно предлагаемого

 <% if (user) { %><%= user.name %><% } %>
  

Я ищу что-то вроде

 <% if (user) {write(user.name)} %>
  

Самое близкое, что я нашел, было

 <%= user.name ? user.name : '' %>
  

в этом хорошем посте от 2015:https://blog.joeandrieu.com/2013/10/16/how-to-conditionally-display-variables-with-ejs /, но этот подход терпит неудачу, по крайней мере, в узле 10, поскольку я получаю не удается прочитать свойство ‘name’ неопределенного. Я делаю это неправильно? Или есть другой способ?

Ответ №1:

Проверьте, не определен ли пользовательский объект. Используйте это:

 <%= typeof user != 'undefined' ? user.name : '' %>
  

В качестве альтернативы вы можете прикрепить свой user объект к locals , чтобы использовать его таким образом:

 <%= user.name ? user.name : '' %>
  

Комментарии:

1. Я попробовал первое, но я все еще получаю «Не удается прочитать свойство ‘name’ из undefined», поскольку я пытаюсь получить typeof чего-то несуществующего : (

2. Что именно означает «прикрепить ваш пользовательский объект к локальным»?

3. locals — это локальные переменные объекта в отображаемом представлении. Вы можете прочитать больше об этом здесь expressjs.com/en/api.html#res.locals . Например, в вашем случае вы могли бы использовать app.use(function (req, res, next) { res.locals.user = req.user; next(); }); в качестве промежуточного программного обеспечения перед вашими маршрутами

4. Я отредактировал свой ответ. Проверьте user объект без какого-либо свойства, если оно не определено. Теперь это должно сработать

5. Понял. Затем вы должны проверить оба. Если только вы не установили объект errors для локальных. В основном locals это ваше решение. Если вы не читали об этом, я предлагаю вам сделать это.