26

For some reason I can't pass a variable to the pug template with Node JS.

app.get("/", function (req, res) {
    res.render('index', { hello : 'Hey'} )
})

....

extends layout.pug

block content
    h1 #{hello} guy

This just returns "guy" in the index.html file

The Hawk
  • 1,496
  • 6
  • 26
  • 43

2 Answers2

23

I think you are using JADE coding (#{hello}) with "pug"(updated jade) plugin with static .html -- completely wrong.

Follow the lines below:

  1. Use this first
app.set('views', __dirname + '/public/views');
app.set('view engine', 'pug');
  1. Then pass this to first visit
app.get('/', function (req, res) {
   res.render('index', { title: 'Hey', message: 'Hello there!'});
});
  1. Then echo in template file "index.pug" in "/public/views"
html
  head
  title= title
body
  h1= message
Augusto Accorsi
  • 317
  • 5
  • 21
Seetpal singh
  • 3,505
  • 1
  • 15
  • 12
  • give me your directory structure snapshot + show me your server file with app.set('views', __dirname + '/public/views'); app.set('view engine', 'pug'); than pass this to first visit app.get('/', function (req, res) { res.render('index', { title: 'Hey', message: 'Hello there!'}); }); – Seetpal singh Jun 28 '16 at 08:54
  • Now it just says "Express" https://github.com/jpking72/nodejsfiddle.git – The Hawk Jul 04 '16 at 18:20
  • i'm having the same issue, and apparently @Seetpalsingh not sure what TheHawk and i are not getting right. – Ande Caleb Apr 26 '19 at 12:29
15

Try this.. works for me.

nodejs part / index.js

const router = require('express').Router();
router.get('/', (req, res, next) => {
    const testObj = {hello: 'Hey'};
    res.render('index', { testObj: JSON.stringify(testObj) });
});

pug/jade part / (index.pug)

script.
    var testObj = !{testObj};

i'm using pug version: 2.0.3