EJS Условный импорт не показывает HTML - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь отобразить html только когда переменная user определена, после входа в систему, но везде, где я это делаю, включение не работает

После входа в систему пользователь перенаправляется на '/' с заполненным пользователем объекта

Console.log печатает пользователя при повторном вызове маршрута '/'

Я попробовал другой синтаксис, кроме приведенного ниже:

if (user)...
if (typeof user !== "undefined")...

index.ejs:

<% var user; %>

<%- include('partials/head'); %>

<body>
  <%- include('partials/navbar'); %>

  <% if (user.length > 0) { %>


    <%- include('home'); %>

  <% }; %>


  <%- include('partials/scripts'); %>
</body>

<%- include('partials/footer'); %>

Маршрут:

router.get('/', function (req, res, next) {


  let user = req.cookies['user'];

  if(user){
    console.log(user);
  }

  res.render('index', user);

});

module.exports = router;

Часть метода входа в систему (работает, отправляет заполненный объект на маршрут):

if (result == true) {

       let token = jwt.sign({ user: newUser }, 'secretkey', { expiresIn: '60s' });

            currentUser.jwt = token;
            currentUser.logado = true;
            res.cookie('user', currentUser);

            res.redirect('/');

1 Ответ

2 голосов
/ 10 июня 2019

Когда вы вызываете

res.render('index', user);

, вы говорите: «используйте свойства значения в user как переменные в шаблоне EJS».Если бы ваше значение user выглядело как { name: "foobar", isAdmin: false }, то вы фактически выполняете

res.render('index', { name: "foobar", isAdmin: false });

Обратите внимание, что это не приведет к созданию переменной шаблона с именем user, так как объект передается в renderне имеет user свойства.Вместо этого вы, вероятно, захотите передать объект, который содержит свойство с именем user, значением которого является ваше user значение:

res.render('index', { user: user });

Или эквивалентно и короче:

res.render('index', { user });

Кроме того, я не уверен, что var user; будет скрывать ваше render -поддерживаемое user значение.Я бы порекомендовал исключить это утверждение из вашего шаблона EJS.

...