как использовать второй параметр рендеринга ‘locals’ для скрипта в файле pug?

#javascript #pug

#javascript #pug

Вопрос:

привет, сначала спасибо за вашу помощь на мой первый вопрос в stackoverflow.

мой вопрос: «как использовать второй параметр рендеринга ‘locals’ для скрипта в файле pug».

в index.js …

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

  Movie.find({}).then((movies)=>{
    res.render('index', {movies:movies});
  }).catch((err)=>{
    console.log(err);
  });
};
  

в index.pug…

 extends layout
block content
  ul
  each movie in movies
    li
      a(href='/edit/' movie._id) #{movie.title}
      script(type='text/javascript').
        console.log(movie)
  

и консоль.вывод журнала — «ошибка неучтенной ссылки: фильм не определен».

на «a (href = ‘/ edit/’ movie._id) #{movie.title}» фильм работает, но на «console.log (movie)» это не так.

я думаю, что область действия не имеет значения, и объявление также не проблема.

в чем проблема? и как я могу использовать локальные файлы для скрипта в файле pug?

еще раз, большое спасибо за вашу помощь!!

Ответ №1:

Конечно, это не определено. Понять, что происходит :

  • Pug рендерит HTML-файл. Это означает, что это шаблон, который вы заполняете значениями. Pug собирается «испечь» все это и вывести HTML-файл. Хорошо.

  • Этот файл содержит строку кода в виде текста : console.log(movie) . Очень хорошо.

  • Теперь этот HTML-файл отправляется в браузер, где он анализируется, и выполняется код. Браузер начинает выполнение кода, видит console.log(movie) и говорит: «Что, черт movie возьми, такое?» Сбой : movie is undefined .

В этом разница между серверной и клиентской средами. Ваш файл создается на сервере, но выполняется в браузере, в совершенно другой среде на совершенно другой машине. Там нет способа movie определить.

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

1. какой простой для понимания ваш ответ. действительно спасибо за вашу помощь. я не совсем понял внешнюю среду и пытаюсь искать причину не в том месте. Спасибо!!