Home >Web Front-end >JS Tutorial >IP of Requesting API
Retrieving the Client's IP Address in Express.js
Express.js, a popular Node.js framework, simplifies the process of building web applications. To obtain the client's IP address within an Express application, you can access the req.ip property provided by the framework. However, in scenarios where your application is behind a proxy or load balancer, the client's IP might be stored in the X-Forwarded-For header. To accurately retrieve the client's IP in such cases, consider the following approach:
const express = require('express'); const app = express(); app.use((req, res, next) => { const clientIp = req.headers['x-forwarded-for'] || req.connection.remoteAddress; console.log(`Client IP: ${clientIp}`); next(); }); app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(3000, () => { console.log('Server is running on port 3000'); });
In this setup, the middleware function captures the client's IP address from the X-Forwarded-For header if present; otherwise, it falls back to req.connection.remoteAddress. This ensures that you obtain the correct IP address regardless of your application's deployment environment.
Enhancing IP Data with IPQuery
Once you've obtained the client's IP address, enriching this data with geolocation and risk assessment information can provide valuable insights. IPQuery is a robust API designed for developers, offering features such as VPN detection, geolocation, and threat intelligence. With support for both IPv4 and IPv6, IPQuery delivers fast lookups with low latency, making it an excellent choice for real-time applications.
Setting Up IPQuery in Your Express Application
To integrate IPQuery into your Express application, follow these steps:
Axios is a promise-based HTTP client for Node.js, facilitating HTTP requests. Install it using npm:
npm install axios
Develop a function that sends a request to the IPQuery API and processes the response:
const axios = require('axios'); async function getIpInfo(ip) { try { const response = await axios.get(`https://api.ipquery.io/${ip}?format=json`); return response.data; } catch (error) { console.error(`Error fetching IP information: ${error}`); return null; } }
Modify your Express middleware to utilize the getIpInfo function:
app.use(async (req, res, next) => { const clientIp = req.headers['x-forwarded-for'] || req.connection.remoteAddress; const ipInfo = await getIpInfo(clientIp); if (ipInfo) { console.log(`Client IP: ${clientIp}`); console.log(`Location: ${ipInfo.location.city}, ${ipInfo.location.country}`); console.log(`ISP: ${ipInfo.isp.org}`); console.log(`Risk Score: ${ipInfo.risk.risk_score}`); } next(); });
This middleware retrieves the client's IP address, fetches detailed information from IPQuery, and logs pertinent details such as location, ISP, and risk score.
Understanding IPQuery's Response Structure
IPQuery provides a comprehensive JSON response containing various data points:
{ "ip": "1.1.1.1", "isp": { "asn": "AS13335", "org": "Cloudflare, Inc.", "isp": "Cloudflare, Inc." }, "location": { "country": "Australia", "country_code": "AU", "city": "Sydney", "state": "New South Wales", "zipcode": "1001", "latitude": -33.854548400186665, "longitude": 151.20016200912815, "timezone": "Australia/Sydney", "localtime": "2024-09-03T22:22:52" }, "risk": { "is_mobile": false, "is_vpn": false, "is_tor": false, "is_proxy": false, "is_datacenter": true, "risk_score": 0 } }
Key components include:
For more detailed information, refer to the IPQuery documentation.
The above is the detailed content of IP of Requesting API. For more information, please follow other related articles on the PHP Chinese website!