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

1 Answer 1

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'

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.