📖 Scenario: You are building a simple Express server that logs and shows the visitor's IP address and the hostname they used to access your site. This helps you understand where your visitors come from and which domain they used.
🎯 Goal: Create an Express server with a route that reads the visitor's IP address using req.ip and the hostname using req.hostname. Then send a response showing these values.
📋 What You'll Learn
Create an Express app
Add a route for GET requests to '/'
Use req.ip to get the visitor's IP address
Use req.hostname to get the hostname
Send a response that includes both the IP and hostname
💡 Why This Matters
🌍 Real World
Web servers often need to know the visitor's IP and hostname to customize responses, log traffic, or apply security rules.
💼 Career
Understanding how to access request details like IP and hostname is essential for backend developers working with Express or similar web frameworks.
Progress0 / 4 steps
1
Set up Express app
Create a variable called express by requiring the 'express' module. Then create a variable called app by calling express().
Express
Hint
Use require('express') to import Express and then call it to create your app.
2
Add a GET route for '/'
Add a GET route on app for path '/' with a callback function that takes req and res as parameters.
Express
Hint
Use app.get with the path '/' and a function with req and res.
3
Get visitor IP and hostname
Inside the GET route callback, create two variables: visitorIp set to req.ip and visitorHost set to req.hostname.
Express
Hint
Use req.ip to get the IP and req.hostname to get the hostname.
4
Send response with IP and hostname
Still inside the GET route callback, send a response using res.send that includes the text: `Your IP is ${visitorIp} and your hostname is ${visitorHost}`.
Express
Hint
Use a template string inside res.send to include the variables.
Practice
(1/5)
1. What does req.ip represent in an Express app?
easy
A. The visitor's IP address
B. The domain name used in the request
C. The server's IP address
D. The HTTP method of the request
Solution
Step 1: Understand the purpose of req.ip
req.ip provides the IP address of the client making the request.
Step 2: Differentiate from req.hostname
req.hostname gives the domain name, not the IP address.
Final Answer:
The visitor's IP address -> Option A
Quick Check:
req.ip = visitor's IP [OK]
Hint: Remember: IP is address, hostname is domain name [OK]
Common Mistakes:
Confusing req.ip with req.hostname
Thinking req.ip is server IP
Assuming req.ip gives HTTP method
2. Which of the following is the correct way to access the hostname in an Express route handler?
easy
A. req.host
B. req.domain
C. req.hostname
D. req.hostName
Solution
Step 1: Recall Express request object properties
The correct property for the domain name is req.hostname.
Step 2: Check other options for validity
req.host, req.domain, and req.hostName are not valid Express properties.
Final Answer:
req.hostname -> Option C
Quick Check:
Hostname property = req.hostname [OK]
Hint: Hostname is all lowercase: req.hostname [OK]
Common Mistakes:
Using req.host instead of req.hostname
Capitalizing property names incorrectly
Assuming req.domain exists
3. Consider this Express route handler:
<pre>app.get('/', (req, res) => {
res.send(`IP: ${req.ip}, Hostname: ${req.hostname}`);
});
If a user visits http://example.com from IP 192.168.1.5, what will be the response text?
medium
A. IP: undefined, Hostname: example.com
B. IP: example.com, Hostname: 192.168.1.5
C. IP: 127.0.0.1, Hostname: localhost
D. IP: 192.168.1.5, Hostname: example.com
Solution
Step 1: Identify req.ip and req.hostname values
req.ip gives the visitor's IP, which is 192.168.1.5. req.hostname gives the domain, which is example.com.
Step 2: Substitute values into the response string
The response string becomes: IP: 192.168.1.5, Hostname: example.com.
Final Answer:
IP: 192.168.1.5, Hostname: example.com -> Option D
Quick Check:
IP and hostname match request info [OK]
Hint: Match IP to visitor, hostname to domain in response [OK]
Common Mistakes:
Swapping IP and hostname values
Assuming localhost IP instead of visitor IP
Using undefined or wrong properties
4. You wrote this Express middleware:
<pre>app.use((req, res, next) => {
console.log(req.ipAddress);
next();
});
What is the problem with this code?
medium
A. Middleware must be declared after routes
B. req.ipAddress is not a valid property; should use req.ip
C. Logging should be done with res.ip instead
D. Missing call to next() to continue middleware chain
Solution
Step 1: Check property names on req
req.ipAddress does not exist in Express; the correct property is req.ip.
Step 2: Verify middleware correctness
The middleware calls next(), so chain continues correctly.
Final Answer:
req.ipAddress is not a valid property; should use req.ip -> Option B
Quick Check:
Use req.ip for IP address [OK]
Hint: Use exact property names: IP is req.ip [OK]
Common Mistakes:
Using req.ipAddress instead of req.ip
Forgetting to call next()
Trying to log IP from res object
5. You want to restrict access to your Express app only to requests coming from the domain trusted.com. Which code snippet correctly uses req.hostname to allow this?
hard
A. app.use((req, res, next) => { if (req.hostname === 'trusted.com') next(); else res.status(403).send('Forbidden'); });
B. app.use((req, res, next) => { if (req.ip === 'trusted.com') next(); else res.status(403).send('Forbidden'); });
C. app.use((req, res, next) => { if (req.host === 'trusted.com') next(); else res.status(403).send('Forbidden'); });
D. app.use((req, res, next) => { if (req.hostname.includes('trusted.com')) next(); else res.status(403).send('Forbidden'); });
Solution
Step 1: Use req.hostname to check exact domain
app.use((req, res, next) => { if (req.hostname === 'trusted.com') next(); else res.status(403).send('Forbidden'); }); correctly compares req.hostname to the string 'trusted.com'.
Step 2: Evaluate other options for correctness
app.use((req, res, next) => { if (req.ip === 'trusted.com') next(); else res.status(403).send('Forbidden'); }); wrongly compares req.ip to a domain string. app.use((req, res, next) => { if (req.host === 'trusted.com') next(); else res.status(403).send('Forbidden'); }); uses invalid req.host. app.use((req, res, next) => { if (req.hostname.includes('trusted.com')) next(); else res.status(403).send('Forbidden'); }); uses includes which may allow subdomains, not exact match.
Final Answer:
Option A code snippet -> Option A
Quick Check:
Exact match with req.hostname = app.use((req, res, next) => { if (req.hostname === 'trusted.com') next(); else res.status(403).send('Forbidden'); }); [OK]
Hint: Check exact domain with req.hostname === 'domain' [OK]
Common Mistakes:
Comparing IP to domain string
Using invalid property req.host
Using partial match instead of exact domain
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.