Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

get user agent from inside jade

I am trying to port a script I wrote for groovy over to jade, and have run into a stumbling block

I need to access the user-agent from inside a jade file. Here is what I have tried so far:

 - var agent = req.headers['user-agent'];
 - var agent = headers['user-agent'];
 - var agent = navigator.userAgent;

every time I get a 500 error from express. Is this even possible?

I know I could do it in a module and pass it to the render statement, but that would mean passing it to EVERY render, as it needs to be global.

Very new to node, and confused. Thanks SO.

like image 396
Fresheyeball Avatar asked Mar 13 '13 01:03

Fresheyeball


2 Answers

Just write your own tiny middleware

app.use(function(req, res, next) {
  res.locals.ua = req.get('User-Agent');
  next();
});

Put this before your app.router

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());

  // here
  app.use(function(req, res, next) {
    res.locals.ua = req.get('User-Agent');
    next();
  });

  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

Then you can use the ua variable in any jade template (for example index.jade)

extends layout

block content
  h1= title
  p Welcome to #{title}
  p=ua
like image 108
zemirco Avatar answered Oct 18 '22 21:10

zemirco


You can pass user-agent from express to jade : (see here)

app.get('/index', function(req, res){
    res.render('home.jade', {
    locals: {
            useragent: req.getHeader('User-Agent')
            }
    });
    res.end();
});

in your jade file

html
  body
    h1 #{useragent}
script(type='text/javascript')
  var useragent = #{useragent};
like image 33
user568109 Avatar answered Oct 18 '22 20:10

user568109