Request header parser: IP address doesn't pass the test

Tell us what’s happening:

I have no idea how to get the IP address. I’ve tried a few ways and used “request-ip” package to help me out. I still can’t get it to work.

Your code so far

const requestIp = require(‘request-ip’);

app.get("/api/whoami", function (req, res) {
const clientIp = requestIp.getClientIp(req);
res.json({
ipadress: clientIp,
language: req.headers[“accept-language”],
software: req.headers[“user-agent”]
});
});

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36.

Challenge: URL Shortener Microservice

Link to the challenge:

You have access to the ip by default through the request object. Checkout the ‘Implement a Root-Level Request Logger Middleware’ lesson as there is an example in the directions.

When you define the function as app.use(function(req, resp, next) { }) just use req.ip to access the ip address

I tried it, but it still does not give me the correct answer. It only shows an address with ::ffff: before it. I tried without trimming it and not trimming it - still not a viable IP address. Could this be a problem with something else?

Do you have a link to your solution so that I can poke around? Here is a snippet from my solution

// init project
var express = require('express');
var app = express();

// enable CORS (https://en.wikipedia.org/wiki/Cross-origin_resource_sharing)
// so that your API is remotely testable by FCC 
var cors = require('cors');
app.use(cors({optionSuccessStatus: 200}));  // some legacy browsers choke on 204

// http://expressjs.com/en/starter/static-files.html
app.use(express.static('public'));

// http://expressjs.com/en/starter/basic-routing.html
app.get("/", function (req, res) {
  res.sendFile(__dirname + '/views/index.html');
});


// your first API endpoint... 
app.get("/api/hello", function (req, res) {
  res.json({greeting: 'hello API'});
});

app.get("/api/whoami", (req, resp) => {
  const { headers } = req;
  resp.json({ipaddress: req.ip, language: headers["accept-language"], software: headers["user-agent"]});
});


// listen for requests :)
var listener = app.listen(process.env.PORT, function () {
  console.log('Your app is listening on port ' + listener.address().port);
});

You gotta enable the ‘trust proxy’ property.
After that, the IP address will be available in the ‘ip’ field of the request.

let responseObject = {}
app.enable('trust proxy')
app.get('/api/whoami', (request, response) => {
  responseObject['ipaddress'] = request.ip
  
  response.json(responseObject)
})

Also are you hosting on Glitch or Repl?

Apparently my problem was that i MISSED A LETTER in the word “address” xD Thanks to the community for helping me <3

Here’s the final solution if anyone is interested:

app.enable("trust proxy");

app.get("/api/whoami", function (req, res) {
  res.json({
    ipaddress: req.ip,
    language: req.headers["accept-language"],
    software: req.headers["user-agent"]
  });
});