7

I'm currently using EJS templating engine to render my HTML pages, but I want to add underscore to simplify the pre-processing. Right now I do this and it works:

var _ = require("underscore");

app.get('/', function(req, res){
    var data = {};
    data.people = [{ name: "john" }, { name: "marry" }];
    data._ = _; // inject underscore.js
    res.render('index', data);
});

Now to render the HTML I have access to underscore:

<% _.each(people, function(person){ %>
    <div><%= person.name %></div>
<% }); %>

However, I have to inject underscore for every route, is there a way to always inject underscore? (maybe somewhere in app.engine setting ?)

Maria
  • 3,455
  • 7
  • 34
  • 47

1 Answers1

11

You could bind _ to app.locals.

Once set, the value of app.locals properties persist throughout the life of the application, in contrast with res.locals properties that are valid only for the lifetime of the request.

app.locals._ = _;

app.get('/', function(req, res){
    var data = {};
    data.people = [{ name: 'john' }, { name: 'marry' }];
    res.render('index', data);
});

In your view:

<% _.each(people, function(person){ %>
    <div><%= person.name %></div>
<% }); %>

There is a great answer from another SO user: Access req and res inside of app.locals

See the documentation on app.locals vs. req.locals

I just added quotes around the names 'john' and 'marry'

Community
  • 1
  • 1
roland
  • 7,695
  • 6
  • 46
  • 61