Bird
Raised Fist0
Expressframework~20 mins

req.ip and req.hostname in Express - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Express IP & Hostname Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
Understanding req.ip in Express

What will be the value of req.ip when a client makes a request to an Express server running locally?

Express
app.get('/', (req, res) => {
  res.send(req.ip);
});
A"localhost"
B"::1"
C"127.0.0.1"
D"example.com"
Attempts:
2 left
💡 Hint

Think about how IPv6 localhost address is represented.

❓ component_behavior
intermediate
2:00remaining
Behavior of req.hostname in Express

If a client accesses an Express app via http://myapp.example.com, what will req.hostname return?

Express
app.get('/', (req, res) => {
  res.send(req.hostname);
});
A"myapp.example.com"
B"example.com"
C"localhost"
D"undefined"
Attempts:
2 left
💡 Hint

Consider what part of the URL req.hostname extracts.

❓ component_behavior
advanced
2:00remaining
Accessing non-existent req.ipAddress

What happens when executing this code to get the client's IP address in Express?

Express
app.get('/', (req, res) => {
  const clientIp = req.ipAddress;
  res.send(clientIp);
});
AReturns the client's IP address as a string
BReferenceError because req.ipAddress is undefined
CReturns undefined without error
DSyntaxError due to invalid property access
Attempts:
2 left
💡 Hint

Check what happens when accessing a non-existent property on an object.

❓ state_output
advanced
2:00remaining
Output of req.hostname with port in Host header

What will req.hostname return if the client sends a request with the Host header set to myapp.example.com:3000?

Express
app.get('/', (req, res) => {
  res.send(req.hostname);
});
A"localhost"
B"myapp.example.com:3000"
C"example.com"
D"myapp.example.com"
Attempts:
2 left
💡 Hint

Remember how Express parses the Host header for hostname.

🔧 Debug
expert
3:00remaining
Debugging incorrect req.ip behind a proxy

An Express app is behind a proxy. The developer notices req.ip always shows the proxy's IP, not the client's. What is the correct fix?

Express
app.set('trust proxy', false);
app.get('/', (req, res) => {
  res.send(req.ip);
});
ASet app.set('trust proxy', true) to trust the proxy headers
BUse req.hostname instead of req.ip to get client IP
CDisable the proxy to get the real client IP
DManually parse req.headers['x-forwarded-for'] without changing trust proxy
Attempts:
2 left
💡 Hint

Express needs to trust the proxy to get the real client IP.

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

  1. Step 1: Understand the purpose of req.ip

    req.ip provides the IP address of the client making the request.
  2. Step 2: Differentiate from req.hostname

    req.hostname gives the domain name, not the IP address.
  3. Final Answer:

    The visitor's IP address -> Option A
  4. 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

  1. Step 1: Recall Express request object properties

    The correct property for the domain name is req.hostname.
  2. Step 2: Check other options for validity

    req.host, req.domain, and req.hostName are not valid Express properties.
  3. Final Answer:

    req.hostname -> Option C
  4. 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

  1. 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.
  2. Step 2: Substitute values into the response string

    The response string becomes: IP: 192.168.1.5, Hostname: example.com.
  3. Final Answer:

    IP: 192.168.1.5, Hostname: example.com -> Option D
  4. 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

  1. Step 1: Check property names on req

    req.ipAddress does not exist in Express; the correct property is req.ip.
  2. Step 2: Verify middleware correctness

    The middleware calls next(), so chain continues correctly.
  3. Final Answer:

    req.ipAddress is not a valid property; should use req.ip -> Option B
  4. 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

  1. 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'.
  2. 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.
  3. Final Answer:

    Option A code snippet -> Option A
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard