Question

I start to using the package "ua-parser" but the creator is too busy to mantain or commit... the npm ua-parser is outdate, and need to download directly from github. Someone know about other good package like ua-parser that is updated and can be used with expressjs? Or have a way to handle just with expressjs?

Was it helpful?

Solution

Have you looked at:

Or, write your own middleware:

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

Reference: get user agent from inside jade

OTHER TIPS

There are two general situations, where you just need simple matching, and you don't need a module for this, you can just use regex in Node.

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

==> true, false

The other, if you need a nice clean output of browser type, this worked best for me. https://www.npmjs.org/package/useragent

My optimal solution for Express...lightweight/fast! https://www.npmjs.com/package/express-useragent

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

Your middleware...

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()
}

Thanks to decoder7283. Upvoted!

I have added one more info to your solution:

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

Output of 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' ]
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top