通过 User Agent 里的数据,可以让我们的应用了解发送请求的用户设备的一些相关信息,比如使用的浏览器,操作系统,具体的版本之类的东西。在 Next.js 应用的中间件里我们可以获取到 User Agent 数据。
打开 middleware,这个 import type 导入的是类型定义,所以要从 next/server 这个包里导入 userAgent 可以单独再写一行。导入 userAgent,来自 next/server 这个包。
然后在这个 middleware 里面,声明一个 ua,它的值是执行 userAgent() 得到的结果,我们要把 request 交给这个 userAgent。下面在控制台上输出这个 ua。
在浏览器,访问一个页面,再到终端观察一下输出的从请求里面提取出来的 User Agent 数据。browser 里的东西就是用户使用的浏览器相关信息,比如刚才发送请求的这个用户的浏览器用的是 Chrome ,version 是具体的版本号。 os 里面的东西是用户的操作系统相关的信息,用户使用的是 Mac OS 这种操作系统,version 是具体的版本。
device 是用户设备相关的信息,现在这里都是 undefined,表示未定义。 isBot 是 false,说明用户不是机器人。
safari
再试一下,换一种浏览器,比如 safari 浏览器,访问一下应用。然后在终端观察一下输出的 User Agent,你会发现在 browser 这里显示,用户使用的浏览器是 safari。
insomnia
我们再试一下用 insomnia 请求一下应用的接口,请求一下之前在应用里定义的这个演示接口。再观察一下终端,这里显示 ua 是 insomnia,其它的都是 undefined。
手机
最后我在手机里再测试一下,用微信浏览器访问一下应用。在终端,这里显示用户使用的浏览器是 WeChat,在 device 里面有用户设备相关的数据,vendor 是厂商,model 是设备的型号,type 指的是设备的类型,比如 mobile 表示手机,tablet 是平板,smarttv 是智能电视。