Search code examples
node.jsexpresshttpserver

Check if an HTTP request came from a phone or a PC


I want to check if an HTTP request came from a phone or a pc so that I know what HTML file to send back. How do I do that? I am using express. Here is my code for my nodeJS server:

var express = require("express"); 
var fs = require("fs"); 

var server = express(); 

server.use("/Static", express.static('./Static/'));

server.get("/", (req, res) => {
    res.send(fs.readFileSync("./main.html", "utf8")); 
}); 

server.listen(8001);

Solution

  • You can check it by reading User Agent request headers, like following

    function testDevice(req, res) {
      console.log(req.headers)
    
      if (req.header('user-agent').indexOf('Mobile') != -1) {
          console.log('You are using mobile device');
        } else {
          console.log('this is probably a computer');
        }
    }
    
    

    You will get different values for User Agent header from PC and Mobile.

    1. For PC you will get something like this:
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',
    
    1. For Mobile you will get something like this:
    'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',