【问题标题】:How to handle user-agent in nodejs environment?如何在 nodejs 环境中处理用户代理?
【发布时间】:2014-04-12 17:10:05
【问题描述】:

我开始使用包“ua-parser”,但是创建者太忙了,无法维护或提交...... npm ua-parser 已过时,需要直接从 github 下载。有人知道其他好包,如 ua-parser 已更新并可与 expressjs 一起使用吗?或者有办法只用 expressjs 处理?

【问题讨论】:

    标签: node.js express user-agent


    【解决方案1】:

    你看过了吗:

    或者,编写自己的中间件:

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

    参考:get user agent from inside jade

    【讨论】:

      【解决方案2】:

      一般有两种情况,只需要简单匹配,不需要模块,在Node中使用regex即可。

      var isIpad = !!req.headers['user-agent'].match(/iPad/);
      var isAndroid = !!req.headers['user-agent'].match(/Android/);
      
      ==> true, false
      

      另一个,如果你需要一个干净的浏览器类型的输出,这对我来说效果最好。 https://www.npmjs.org/package/useragent

      【讨论】:

        【解决方案3】:

        我对 Express 的最佳解决方案...轻巧/快速! https://www.npmjs.com/package/express-useragent

          app.use(require('express-useragent').express())
        

        你的中间件...

        app.use(function(req, res, next) {
          req.session.useragent = {
             browser: req.useragent.browser,
             version: req.useragent.version,
             os: req.useragent.os,
             platform: req.useragent.platform
          }
          console.log(JSON.stringify(req.session.useragent, null ,4))
          next()
        }
        

        【讨论】:

          【解决方案4】:

          感谢decoder7283。点赞!

          我在您的解决方案中又添加了一项信息:

          const app = express();
          const useragent = require('express-useragent');
          app.use(useragent.express());
          
          app.use(function(req, res, next) {
              if (!req.session.useragent) {
                  let userAgentIs = (useragent) => {
                      let r = [];
                      for (let i in useragent) 
                          if (useragent[i] === true)
                              r.push(i);
                      return r;
                  }
                  req.session.useragent = {
                      browser: req.useragent.browser,
                      version: req.useragent.version,
                      os: req.useragent.os,
                      platform: req.useragent.platform,
                      geoIp: req.useragent.geoIp, // needs support from nginx proxy
                      source: req.useragent.source,
                      is: userAgentIs(req.useragent),
                  };
              }
              return next();
          });
          

          req.session.useragent的输出

          {
            browser: 'Firefox',
            version: '92.0',
            os: 'Windows 10.0',
            platform: 'Microsoft Windows',
            geoIp: {},
            source: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0',
            is: [ 'isAuthoritative', 'isFirefox', 'isDesktop', 'isWindows' ]
          }
          

          【讨论】:

            猜你喜欢
            • 2021-05-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-11-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多