Pass a variable from javascript to ejs

被刻印的时光 ゝ 提交于 2020-01-21 11:08:53

问题


I want to use a variable which is declared in javascript file to a ejs file.

javascript:

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

var myVar = 1;

In the ejs file , where I want to use that variable inside a few if statements ,I have to declare it again in order to be able to use it.

ejs file:

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

How can I avoid this?Or is there a way for creating a configuration file which is accesible from both javascript and ejs?

I tried also to use:

app.locals.myVar = 1

but it is undefined in the ejs file.

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

In my code I am using:

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

});

after using the app.locals:

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

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

});

and even though the code runs fine , I am receiving:

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)
   .....

which doesn't make sence ,since as I said the code runs fine.And If I run it without the addition of the second res.render('user_info.ejs) I receive no errors.

So, can I have two res.render statements?


回答1:


Here's a very simple example on how app.locals can be used to expose variables to (EJS) templates:

// 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>
<% } %>



回答2:


The app.locals.myVar approach should work, so something must be getting in the way. But you could avoid using app.locals.myVar altogether and pass variables directly to your views with:

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

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

The myVar variable should now be available to the "testPage" ejs file. Inside of it you could do:

<%= myVar %>

And see it output "1".

Lastly, make sure you have set the view engine to ejs:

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

Otherwise it won't work.



来源:https://stackoverflow.com/questions/37616719/pass-a-variable-from-javascript-to-ejs

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!