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?
Asked
Active
Viewed 9.2k times
52
-
Note to self: https://expressjs.com/en/5x/api.html#req.get – M Imam Pratama Jul 05 '23 at 05:11
4 Answers
88
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
43
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

C B
- 12,482
- 5
- 36
- 48
11
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()
}

buycanna.io
- 1,166
- 16
- 18
1
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' ]
}

tom
- 9,550
- 6
- 30
- 49