Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

How to pass data to every view in Express 3?

How to pass data to every view in Express 3?

Problem

I was using dynamicHelpers to set some variables on every page in Express 2. Now that they're gone and I'm not sure how to do it. What is the best way to do something like this with Express 3?

app.js

app.dynamicHelpers( require('dynamicHelpers') )

dynamicHelpers.js

exports.user = function(req, res) {
    return req.user || {};
}

exports.message = function(req, res) {
    return req.flash.message || {};
}

in veiw.jade

h1= user.username
Problem courtesy of: Pardoner

Solution

middleware example

var app = require('express')()
  , jade = require('jade')

app.set('views', __dirname + '/views')
app.set('view engine', 'jade')  

app.use(function(req,res,next){
  res.locals.user = { name : "test" }
  next()
})

app.get('*',function(req,res){
   res.render('index.jade')
})

app.listen('8001')

index.jade

!!! 5
html
  body
    div hello #{user.name}

to use req.flash try:

var app = require('express')()
  , jade = require('jade')

app.set('views', __dirname + '/views')
app.set('view engine', 'jade')

app.use(require('connect-flash')())

// Expose the flash function to the view layer
app.use(function(req, res, next) {
   res.locals.flash = req.flash.bind(req)
   next()
})


app.get('*',function(req,res){
   res.render('index.jade')
})

app.listen('8001')

updated my answer, haven't migrated to 3.0 yet, at https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x under View options:

The "view options" setting is no longer necessary, app.locals are the local variables 
merged with res.render()'s, so app.locals.pretty = true is the same as passing 
res.render(view, { pretty: true }).
Solution courtesy of: supernova

Discussion

View additional discussion.



This post first appeared on Node.js Recipes, please read the originial post: here

Share the post

How to pass data to every view in Express 3?

×

Subscribe to Node.js Recipes

Get updates delivered right to your inbox!

Thank you for your subscription

×