Develop a Node.js/express web app to know your ISP, Geolocation and more.......
A tutorial to brush up asynchronous function with deploying it to glitch.com
Click here to have a demo ๐
This started with my curiosity to integrate the IP-logging of users visiting my portfolio website. (No way I'm collecting your data) ๐
So my curiosity asked me why not use a third service like https://ip-api.com/ to help me create an API that can provide a user ISP, Geolocation and most importantly IP. So after a tipsy-curvy lane of googling from here and there.
Started by moving to my vs code editor.
Created file --> server.js
moving on to my vs code terminal
git init -y
git install express
git install axios
git install request-ip
You can check the documentation of the request-ip module in node.js here https://www.npmjs.com/package/request-ip
Zooming in to server.js basic code structure was to require the modules of express, request-ip and axios.
Now, move on to writing the route handlers where the by using
app.get('/', async (req, res) => {}
const express = require('express');
const app = express();
const requestIP = require('request-ip');
const axios = require('axios');
app.listen(3000, () => {
console.log('App listening on port 3000');
});
As you see it's an async function that will handle some API calls
We are using https://ip-api.com/ You may check the JSON format in the given website to add data as per your need.
requestIP.getClientIp(req);
This line uses the requestIP
library (or module) to obtain the IP address of the client making the HTTP request. The getClientIp
function is called with the req
object, which represents the HTTP request being handled. It extracts the client's IP address and assigns it to the ipAddress
variable.
We use try and catch for better handling of the incoming requests.
hence try block is where asynchronous operations are performed, and any errors that occur will be caught in the corresponding catch
block.
const { data } = await axios.get(
ip-api.com/json/${ipAddress}`);`;`)
This line makes an HTTP GET request to the "ip-api.com/json" API, which is used for IP geolocation. It appends the ipAddress
variable to the URL as a parameter, effectively requesting information about the IP address of the client.
axios.get
is used to perform the HTTP GET request. The await
keyword is used to wait for the response to be received before continuing execution.
The response from the API is destructured to extract the data
property from it. This data
object likely contains information about the IP address's geolocation.
app.get('/', async (req, res) => {
const ipAddress = requestIP.getClientIp(req);
try {
const {data} = await axios.get(`http://ip-api.com/json/${ipAddress}`);
const info = {
ip: ipAddress,
city: data.city,
region: data.regionName,
country: data.country,
org: data.org,
isp: data.isp
};
let html = `
<h1>IP Address Info</h1>
<table>
<tr><td>IP</td><td>${info.ip}</td></tr>
<tr><td>City</td><td>${info.city}</td></tr>
<tr><td>Region</td><td>${info.region}</td></tr>
<tr><td>Country</td><td>${info.country}</td></tr>
<tr><td>ISP</td><td>${info.isp}</td></tr>
</table>
`;
res.send(html);
} catch (err) {
console.error(err);
res.status(500).send('Error getting IP info');
}
});
So, in a nutshell, this code sets up a route handler that, when accessed, fetches geolocation information based on the client's IP address using the IP-API service and then structures that information into an object called info
. This info
object can be used later in the code, or you can send it as a response to the client's HTTP request.
Happy Coding!๐ฝ