Express EJS: «Значение не определено», но оно внутри «если» - PullRequest
0 голосов
/ 16 мая 2019

В узле я отправляю массив tasks для одних маршрутов, а не для других. Здесь я посылаю эти tasks данные:

pagedata = {
    title: 'Task List App',
    tasks: [{name: 'a task'}]   <---
}
 res.render('index', pagedata);

В разметке в файле EJS есть if для данных этой задачи:

<% if (tasks) { %>
    ...
<% } %>

Это отлично работает. Но на некоторых страницах не будет задач, поэтому я использую if. Но когда я не включаю свойство task в объект pageData, например, так:

pagedata = {
    title: 'Task List App'
}
 res.render('index', pagedata);

Я получаю ошибку tasks is not defined. Я думал, что единственная причина, по которой вы будете использовать if, заключается в том, что эти данные могут отсутствовать. Чего мне не хватает?

Ответы [ 2 ]

3 голосов
/ 16 мая 2019

Все ваши переменные автоматически передаются через объект "locals" ejs, по вашему мнению, просто сделайте это:

<% if(locals.tasks) { %>

Это предотвратит аварийное завершение EJS, если некоторая переменная не определена.

Кроме того, этот объект locals также присутствует в res.locals (если вы используете express), это означает, что вы также можете определить некоторую переменную / функцию для вашего представления непосредственно в промежуточном программном обеспечении:

app.use(function(req, res, next){
     res.locals.formatString = function(str){
         return str.toUpperCase();
     };

     res.locals.globalLang = "en";
     return next();
});

router.get("/index", function(req, res){
    res.render("index.ejs",{title: "index"});
});

// in index.ejs
<%- locals.formatString(locals.title); %>
<%- locals.globalLang; %>
....
1 голос
/ 16 мая 2019

Вы можете спросить это так:

<% if (tasks != undefined) { %>
    ...
<% } %>
...