Использовать переменную, сгенерированную сервером, во включенном js-файле внешнего интерфейса - PullRequest
2 голосов
/ 06 марта 2019

node.js новичок здесь. Поэтому я пишу приложение, в котором каждую секунду я получаю число, сгенерированное сервером, и вставляю его через приложение. Перейдите к моему index.pug файлу, и я хочу работать с этим номером в файле JS для встраивания. Как мне это сделать?

server.js

randomNumber = 4;
app.get('/',(req,res) => {
    res.render('index', {title: 'Number', count: randomNumber})
});

index.pug

html
 head
  title= title
 body
  h1= count
  script(src="includes/client.js")

client.js

var chart = new CanvasJS.Chart("chartContainer", { 
   title: {
    text: count
   },
});

Теперь, как мне работать с переменной randomNumber в файле client.js ? Что мне здесь не хватает? Приложение всегда говорит мне, что count не определено

1 Ответ

1 голос
/ 06 марта 2019

Вам необходимо помнить, что в вашем запросе есть три отдельных контекста Javascript:

  1. Маршрут (server.js),
  2. Представление / шаблон (индекс.pug) и
  3. браузер

Ни один из вышеперечисленных не сможет получить доступ к любому другому, если вы явно не передадите переменные следующему в цепочке.

Вы явно передаете заголовок и счетчик в представление / шаблон в операторе res.render, и чтобы затем передать их на шаг дальше в браузер, вам нужно использовать интерполяцию неэкранированной строки и добавить ее в <script> пометить следующим образом:

html
 head
  title= title
 body
  h1= count
  script.
    var count = !{count};
  script(src="includes/client.js")

Если вы хотите, чтобы count считывался в виде строки, определите его следующим образом:

html
 head
  title= title
 body
  h1= count
  script.
    var count = "!{count}";
  script(src="includes/client.js")
...