I am trying to take a variable I've sent to my Pug page from Node.js and place it inside a javascript variable inside of a pug script tag. (Sorry if that is confusing) My node.js code is as follows:
app.get('/profile', function (req, res) {
var session = req.session;
res.render('./login.pug', { username: session.uniqueID });
});
When I use the variable in my pug page code like this
input(type='text', id='username', value=username)
it works fine. The value will be changed to the username that the variable holds. But when I try to put the same value in my script tag such as
script.
var currentuser = username;
the browser console will tell me that username is undefined. How do I properly pass the value of the variable username inside the script tag? Also is there a way to pass the variable username into an external js file as well? Thank you in advance for your help!
Normally in pug you can substitute variables like that, but we're in a Plain Text block when we put the period at the end of the script tag and regular variable substitution doesn't work in these blocks:
script.
^
In order to output dynamic JavaScript in a Plain Text block we need to use unescaped interpolation to do it with !{...}
.
If you are just trying to output a single string value just put quotes around the interpolation tag:
var currentuser = '!{username}';
When you have a more complex JavaScript object you can stringify the variable, and you won't need quotes for this as it's valid JavaScript output.
route:
res.render('test', {
user: {"name": "Joe Smith"}
});
template:
var currentuser = !{JSON.stringify(user)};
outputs:
<script>var currentuser = {"name":"Joe Smith"};</script>
In case you're curious, the #{...}
escaped interpolation inserts invalid characters and looks like this:
template:
var currentuser = #{JSON.stringify(user)};
outputs:
<script>var currentuser = {"name":"Joe Smith"};</script>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With