Search code examples
javascriptnode.jsexpressmiddleware

Best way to pass data in middleware with express


I want to make user details (ex: username) appear in my nav bar, and for that I have have been sending the 'req.session.user' variable to my views.

What I've been doing is, for every view render, I send the req.session variable like so:

app.get('/index', function(req, res, next) {
    if(req.session.user) {
        res.render("index", {user:req.session.user});
    }
});

And then in my backbone view, where my navbar is located, I print out the username.

What are the best practices to overcome this repetitive achievement? I've searched, but had no results.

Thank you.


Solution

  • If you do not want to send req.session.user to each page like this: {user:req.session.user} you can add this data to res.locals object:

    app.use(function(req, res, next) {
        res.locals.user = req.session.user
        next()
    })
    

    Thus, on each page you can output user name like this (example with ejs):

    <% if (user) { %>
        <h1>Hello, <%= user.name %></h1>
    <% } %>