server-side browser detection? node.js server-side browser detection? node.js node.js node.js

server-side browser detection? node.js


var ua = request.headers['user-agent'],    $ = {};if (/mobile/i.test(ua))    $.Mobile = true;if (/like Mac OS X/.test(ua)) {    $.iOS = /CPU( iPhone)? OS ([0-9\._]+) like Mac OS X/.exec(ua)[2].replace(/_/g, '.');    $.iPhone = /iPhone/.test(ua);    $.iPad = /iPad/.test(ua);}if (/Android/.test(ua))    $.Android = /Android ([0-9\.]+)[\);]/.exec(ua)[1];if (/webOS\//.test(ua))    $.webOS = /webOS\/([0-9\.]+)[\);]/.exec(ua)[1];if (/(Intel|PPC) Mac OS X/.test(ua))    $.Mac = /(Intel|PPC) Mac OS X ?([0-9\._]*)[\)\;]/.exec(ua)[2].replace(/_/g, '.') || true;if (/Windows NT/.test(ua))    $.Windows = /Windows NT ([0-9\._]+)[\);]/.exec(ua)[1];

That should work for you. Just put it in your response handler.


The ua-parser library for node (npm install ua-parser) exposes a big set of regexes for browser user-agent strings. I'd strongly recommend it for your needs.


I threw this together using ua-parser-js. I'm sure it can be improved but it's functional.

Install the package:

sudo npm install ua-parser-js

In your routes file require UAParser:

var UAParser = require('ua-parser-js');

Do some stuff with it:

function ensureLatestBrowser(req, res, next) {  var parser = new UAParser();  var ua = req.headers['user-agent'];  var browserName = parser.setUA(ua).getBrowser().name;  var fullBrowserVersion = parser.setUA(ua).getBrowser().version;  var browserVersion = fullBrowserVersion.split(".",1).toString();  var browserVersionNumber = Number(browserVersion);  if (browserName == 'IE' && browserVersion <= 9)    res.redirect('/update/');  else if (browserName == 'Firefox' && browserVersion <= 24)    res.redirect('/update/');  else if (browserName == 'Chrome' && browserVersion <= 29)    res.redirect('/update/');  else if (browserName == 'Canary' && browserVersion <= 32)    res.redirect('/update/');  else if (browserName == 'Safari' && browserVersion <= 5)    res.redirect('/update/');  else if (browserName == 'Opera' && browserVersion <= 16)    res.redirect('/update/');  else    return next();}

and then in your route just call:

app.all(/^(?!(\/update)).*$/, ensureLatestBrowser);

If you want to see what other information you can get with UAParser check out their demo page.