#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
это ваше решение. Если вы не читали об этом, я предлагаю вам сделать это.