I have folder structure as follows:
/app
|-routes.js
/public
|-index.html
server.js
Server.js looks like this:
var nunjucks = require('nunjucks');
var express = require('express');
var app = express();
nunjucks.configure('public', { autoescape: true, express: app });
var port = process.env.PORT || 8080;
app.use(express.static(__dirname + '/public'));
require('./app/routes')(app); // configure our routes
app.listen(port);
exports = module.exports = app;
app/routes.js looks like this:
module.exports = function(app) {
app.get('*', function(req, res) {
res.render('index.html', { awesome: 'page-title' });
});
};
public/index.html looks like this:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<base href="/">
<title>{{awesome}}</title>
</head>
<body>
<h1>{{ awesome }}</h1>
</div>
</body>
</html>
When I start up my node app and browse to localhost:8080, the page title is the string {{ awesome }} and the contains the string {{ awesome }} rather than the required "page-title". How come nunjucks is not rendering the variable into the template?
You have to split 'public' folder. What is in public, cannot be processed by nunjucks. It's static (you declared it so). Put your nunjucks template in folder e.g. 'views'
/app
|-routes.js
/public
|css/
|img/
/views
|- index.html
server.js
nunjucks.configure('views', ...)