2016-06-03 5 views
4

Я хочу использовать переменную, которая объявлена ​​в файле javascript в файл ejs.Передача переменной из javascript в ejs

JavaScript:

var express = require('express'); 
var app = express(); 

var myVar = 1; 

В файле EJs, где я хочу использовать эту переменную внутри несколько, если заявления, я должен объявить его снова для того, чтобы иметь возможность использовать его.

EJS файл:

var myVar = 1; 
if (my Var) .... 

Как я могу избежать этого или есть способ для создания файла конфигурации, который является доступным из обоих яваскрипт и EJS?

Я попробовал также использовать:

app.locals.myVar = 1

но не определено в файле EJs.

------- UPDATE --------------------------

В моем коде я использую:

app.get('/', function (req, res) { 
    res.render('index', { user : req.user, message: [] }); 

}); 

после использования app.locals:

app.get('/', function (req, res) { 

    res.render('index', { user : req.user, message: [] }); 
    res.render('user_info.ejs'); 

});

и даже если код работает нормально, я получаю:

ReferenceError: ....user_info.ejs:18 

>> 18|   height:60px; 


user is not defined 
    at eval (eval at <anonymous> (...node_modules/ejs/lib/ejs.js:464:12), <anonymous>:20:12) 

    at returnedFn (...node_modules/ejs/lib/ejs.js:493:17) 
    at View.exports.renderFile [as engine] (.../node_modules/ejs/lib/ejs.js:350:31) 
    ..... 

, который не делает чувство, так как я сказал, что код работает fine.And Если я запустить его без добавления второго res.render('user_info.ejs) У меня нет ошибок.

Итак, могу ли я иметь два заявления res.render?

+0

'app.locals.myVar' должен работать, если вы установите его в правильном месте и правильно его используете в своем шаблоне. Вероятно, вам стоит добавить больше кода. – robertklep

+0

JS не пропускает переменные между файлами. Вместо этого все файлы загружаются и запускаются в глобальном контексте (в браузере это окно). – evolutionxbox

+0

@robertklep: проблема в том, что он не определен в файле ejs. Я не уверен, могу ли я использовать 'var express = require ('express'); var app = express();' также в файле ejs и if да, если он будет использовать значение из файла javascript. – George

ответ

1

Вот очень простой пример того, как app.locals можно использовать для отображения переменных (Эйс) шаблоны:

// app.js 
var express = require('express'); 
var app  = express(); 
var server = app.listen(3000); 

app.locals.myVar = 1; 

app.get('/', function(req, res) { 
    res.render('index.ejs'); 
}); 

// views/index.ejs 
<% if (myVar) { %> 
    <h1>myVar is here!</h1> 
<% } else { %> 
    <h1>Boohiss no myVar!</h1> 
<% } %> 
+0

: Hmm..Can Я спрашиваю вас, если у меня также есть 'res.render ('index', {user: req.user, message: []});' как я могу правильно написать 'index.ejs'? Я хочу сказать, что я пытаюсь: 'app.get ('/', function (req, res) { \t res.render ('index', {user: req.user, message: []}); \t res.render ('index.ejs'); }); 'но это дает мне некоторую странную ошибку ссылки в index.ejs, хотя она работает нормально. – George

+0

: Извините, что настаивает. В нескольких словах у меня есть 2 оператора res.render в 'app.get ('/')'. Даже несмотря на то, что он работает, он дает мне ссылочную ошибку выше. Можете ли вы сообщить, если это возможно? Спасибо .. – George

+0

@George, возможно, создаст новый вопрос для этого? Или ошибка такая же, как и раньше? Если да, можете ли вы добавить точную ошибку, которую вы получаете по исходному вопросу? – robertklep

4

app.locals.myVar подход должен работать, так что-то должно быть мешая. Но вы могли бы избежать использования app.locals.myVar вообще и проходят переменные непосредственно с представлениями с: Теперь

var express = require('express'); 
var app = express(); 

app.get('/', function(req, res) { 
    var myVar = 1; 
    res.render('testPage', { myVar : myVar }); 
}); 

Переменная myVar должна быть доступна в «тестовую страницу» Эйс файл. Внутри этого вы могли бы сделать:

<%= myVar %> 

И посмотреть его выход «1».

Наконец, убедитесь, что вы установили вид двигатель EJS:

app.set('view engine', 'ejs'); 

В противном случае он не будет работать.

Смежные вопросы