شناسایی نوع دستگاه در ExpressJS

13 خرداد 1398, خواندن در 2 دقیقه

ممکنه شما یک API توسعه داده باشید که توسط انواع دستگاه ها (مثل دسکتاپ و موبایل ها) مورد استفاده قرار میگیره اما در شرایطی قرار بگیرید که مثلا بخواهید قطعه ای از کد فقط برای مرورگرهای دسکتاپ و موبایل اجرا بشه و برای اپلیکیشن موبایل اتفاق نیافته. Http header ها کمک زیادی در این مورد نمی کنند پس باید دنبال یک راه بهتر باشیم. پرسش اصلی ما اینه که "چطور میتونیم بفهمیم چه نوع دستگاهی (Device) سرویس API ما رو صدا میزند؟" من یک ماژول node به اسم express-device رو پیدا کردم که دقیقا کاری که میخواهم رو انجام میده.

پس میتونیم از این ماژول به عنوان middleware در express استفاده کنیم تا نوع دستگاه رو در آبجکت request مشخص کنه. 

ساخت فایل package.json

پروژه رو با دستور npm init شروع میکنیم تا فایل package.json ایجاد بشه. 

نکته : برای اینکه سوال ها رو نپرسه از دستور npm init -yes استفاده کنید.

حالا که فایل رو آماده کردید ماژول های لازم رو نصب می کنیم. ما به دو ماژول express و express-device احتیاج داریم :

npm i --save express express-device

این فایل package.json من هست :

{
  "name": "devicedetection",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.14.0",
    "express-device": "^0.4.2"
  }
}

سرور Node 

میخواهیم یک سرور ساده express بسازیم که درخواست رو در hello/ بپذیره و پاسخی مثل Hi to Mobile یا web user بسته به نوع دستگاه بده.

این کد سرور ماست : فایل app.js

var express = require('express');
var app = express();
var device = require('express-device');
app.use(device.capture());

app.get('/hello',function(req,res) {
  res.send("Hi to "+req.device.type.toUpperCase()+" User");
});

app.listen(3000);
console.log("Listening to Port 3000");

اگر شما آدرس localhost:3000/hello رو وارد کنید و اگر از دسکتاپ این کار رو انجام بدید پیام زیر رو مشاهده خواهید کرد :

و اگر با گوشی موبایل وارد صفحه شوید پیام زیر رو مشاهده میکنید :

همچنین این میتونه تبلت ها , تلویزیون ها و ربات ها رو هم تشخیص بده. شما میتونید بهش از طریق آبجکت request دسترسی داشته باشید. این فایل req.device هست :

{ parser: 
   DeviceParser {
     options: 
      { emptyUserAgentDeviceType: 'desktop',
        unknownUserAgentDeviceType: 'phone',
        botUserAgentDeviceType: 'bot',
        carUserAgentDeviceType: 'car',
        parseUserAgent: false },
     make_sure_parser_was_executed: [Function],
     get_model: [Function],
     get_type: [Function] },
  type: 'phone',
  name: '' }

در قسمت type میتونید انواع دستگاه ها رو وارد کنید.

منبع

چه امتیازی به این مقاله می دید؟
خیلی بد
بد
متوسط
خوب
عالی

دیدگاه‌ها و پرسش‌ها

برای ارسال دیدگاه لازم است، ابتدا وارد سایت شوید.

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

آفلاین
user-avatar
امیررضا سیستانه ای @reza.sys
دنبال کردن

گفتگو‌ برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن وارد شو