从内部获取用户代理

时间:2013-03-13 01:29:48

标签: node.js express pug

我正在尝试将我为groovy写的脚本移植到jade,并遇到了绊脚石

我需要从jade文件中访问用户代理。这是我到目前为止所尝试的:

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

每次我从快递中得到500错误。这甚至可能吗?

我知道我可以在模块中执行它并将其传递给render语句,但这意味着将它传递给每个渲染,因为它需要是全局的。

节点很新,很困惑。谢谢你。

2 个答案:

答案 0 :(得分:13)

只需编写自己的微型中间件

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

将它放在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')));
});

然后,您可以在任何ua模板中使用jade变量(例如index.jade

extends layout

block content
  h1= title
  p Welcome to #{title}
  p=ua

答案 1 :(得分:4)

您可以将user-agent从快递传递给jade :(请参阅here

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

在你的玉器文件中

html
  body
    h1 #{useragent}
script(type='text/javascript')
  var useragent = #{useragent};