如何在nodejs环境中处理user-agent?

问题描述 投票:0回答:5

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

node.js express user-agent
5个回答
89
投票

你看过吗:

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

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

参考:从jade内部获取用户代理


44
投票

一般有两种情况,你只需要简单的匹配,并且不需要为此模块,你可以在 Node 中使用正则表达式。

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

==> true, false

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


11
投票

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

1
投票

感谢解码器7283。已投赞成票!

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

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' ]
}

0
投票

例如,要获取用户数据,可以使用

import express from 'express';
import useragent from 'express-useragent';

const app = express();
app.use(useragent.express());

在控制器中

const userAgentInfo = req.useragent;

你可以获得

{
isMobile: boolean;
isMobileNative: boolean;
isTablet: boolean;
isiPad: boolean;
isiPod: boolean;
isiPhone: boolean;
isAndroid: boolean;
isBlackberry: boolean;
isOpera: boolean;
isIE: boolean;
isEdge: boolean;
isIECompatibilityMode: boolean;
isSafari: boolean;
isFirefox: boolean;
isWebkit: boolean;
isChrome: boolean;
isKonqueror: boolean;
isOmniWeb: boolean;
isSeaMonkey: boolean;
isFlock: boolean;
isAmaya: boolean;
isEpiphany: boolean;
isDesktop: boolean;
isWindows: boolean;
isWindowsPhone: boolean;
isLinux: boolean;
isLinux64: boolean;
isMac: boolean;
isChromeOS: boolean;
isBada: boolean;
isSamsung: boolean;
isRaspberry: boolean;
isBot: boolean;
isCurl: boolean;
isAndroidTablet: boolean;
isWinJs: boolean;
isKindleFire: boolean;
isSilk: boolean;
isCaptive: boolean;
isSmartTV: boolean;
silkAccelerated: boolean;
browser: string;
version: string;
os: string;
platform: string;
geoIp: { [key: string]: any };
source: string;
}
© www.soinside.com 2019 - 2024. All rights reserved.