Ошибка доступа к переменной в шаблоне E JS - PullRequest
0 голосов
/ 03 августа 2020

Я использую механизм шаблонов E js для своего проекта expressjs, и, несмотря на передачу моих объектов в мой чат просмотра. E js файл, я получаю неопределенное значение в моем e js файл.

маршруты. js:

async function redirectIfLoggedIn(req, res, next) {
  if (req.user){
    const user = await UserModel.findById(req.session.passport.user).exec(); 
    console.log(user.username);
    return res.render('chat.ejs', {user : user.username});
  } 
  return next();
}

chat.e js:

<html>
  <head>
  </head>
  <body>
    .
    .
    .
    <script>
            alert(1);
            var username = <%= user %>;
            alert(2);
    </script>
  </body>
</html>

1. Сервер: В терминале Печатает имя пользователя, которое передается как переменная в шаблон.

2. Клиент: после загрузки страницы выдает только предупреждение (1), а не предупреждение (2). И попытался получить доступ к имени пользователя из консоли клиента, который дает значение undefined.

Даже пробовал заменить <% = user%> на <% = locals.user%>

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Для решения этой проблемы изначально мне было любопытно, какой тип данных передается, поэтому я проверил, используя typeof() и получил undefined. Затем я проверил загруженную страницу, если значение присвоено; и да, значение было присвоено.

Ps: Я использовал имя пользователя в качестве аргумента для socket.emit('username',username)'

Итак, я попытался преобразовать переменную шаблона пользователя в строку, но безуспешно. Это изменение кода работало нормально:

var username = <%= user %>; изменено на var username = "<%= user %>";

0 голосов
/ 04 августа 2020

Использование <%= %> предназначено для преобразования этого выражения в html «код». Все, что вам нужно сделать, это написать var username = user;, то есть все javascript. Пример использования <%= %>:

<p>Username: <%= user %></p>
...