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