ExpressJS Передает переменные JavaScript

Я полностью потерял это; Я использую NodeJS для извлечения JSON, и мне нужно передать эту переменную на мою страницу и использовать JavaScript для использования.

app.get('/test', function(req, res) {
    res.render('testPage', {
        myVar: 'My Data'
    });

Это мой экспресс-код (очень простой для тестирования); теперь с помощью JADE я хочу собрать эти данные, которые, как я знаю, для рендеринга на странице, просто

p= myVar

Но мне нужно собрать эти данные в JavaScript (если возможно, в файле .js), но пока просто для отображения переменной в поле "Предупреждение" я попытался

alert(#{myVar})

И многие другие, если кто-то может помочь, очень ценится

Ответ 1

Попробуйте следующее:

alert('!{myVar}')

Это хорошая идея для JSON кодировать данные, если это больше, чем просто строка.

alert('!{JSON.stringify(myVar)}')

Ответ 2

Как сказал Тимофей:

<script type="text/javascript>var myVar = #{JSON.stringify(myVar)};</script>

Это также можно сделать следующим образом, если вам не нравится писать HTML-код в нефритовых шаблонах:

script
  var myVar = !{JSON.stringify(myVar)};
  var myVar2 = !{JSON.stringify(myVar2)};

Обновление. Для Express 4 используйте script. вместо script, чтобы он отображался как javascript вместо html.

Ответ 3

Ну, Javascript (и V8) имеет встроенную функцию для рендеринга JSON от объекта, а JSON, по-видимому, синтаксически совместим с Javascript.

Таким образом, самый простой способ сделать то, что вы пытаетесь сделать:

<script type="text/javascript>var myVar = #{JSON.stringify(myVar)};</script>

И да, вы можете использовать HTML в шаблоне Jade.

Ответ 4

Я знаю, что немного опаздываю на вечеринку, но несколько месяцев назад я написал модуль (JShare) для решения этой точной проблемы. Проверьте это: https://npmjs.org/package/jshare

Ответ 5

Вы можете использовать Now.js для этого. Он легко позволяет вам совместно использовать переменные клиент/сервер в режиме реального времени.

Проверьте это: http://www.nowjs.com/