【问题标题】:get user agent from inside jade从玉内部获取用户代理
【发布时间】:2013-02-28 19:20:39
【问题描述】:

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

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

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

每次我从 express 收到 500 错误。这甚至可能吗?

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

对 node 很陌生,很困惑。谢谢。

【问题讨论】:

  • 每次请求到来时都应该传递它来渲染,每个请求的用户代理都可以不同。
  • 每个请求都会渲染翡翠
  • 是的,每个请求都分别呈现响应。
  • 所以我没有理由不能访问 .jade 文件中的用户代理。

标签: node.js express pug


【解决方案1】:

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

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')));
});

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

extends layout

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

【讨论】:

  • 效果很好。只是一个快速跟进的问题,为什么 app.configure 下的位置很重要?
  • 好问题!你可能可以把它放在你想要的任何地方。我倾向于将我的中间件放在路由器之前,因为这样所有的处理(解析主体、会话等)都完成了,路由也得到了处理。
  • 我把它放在底部,它坏了,por que?
  • 路由器已经接管并渲染了视图。因此,您的自定义 res.locals.ua 变量尚未设置。 anywhere我在路由器前的任何地方都提到了:)
  • 好提示,对我有用。我使用了req.getHeader('User-Agent'),它在express 3.4.0 中对我有用
【解决方案2】:

你可以将user-agent从express传递给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};

【讨论】:

  • 这是唯一的方法吗?没有办法在全球范围内这样做吗?
  • 看这里:stackoverflow.com/questions/12088557/…jade scope 和 node 不同,所以要使用必须在 render 中传入。
猜你喜欢
  • 2020-10-13
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 1970-01-01
  • 2016-09-10
  • 1970-01-01
  • 2012-03-16
  • 2016-01-13
相关资源
最近更新 更多