Implement a Root-Level Request Logger Middleware

This problem has me a bit confused. Can someone help me understand it?

let express = require('express');
let app = express();

app.get("/", (req, res) => {
  res.sendFile(absolutePath = __dirname + '/views/index.html');
});

app.use("/public",express.static(__dirname + '/public'));

app.get("/json", (req, res) => {
  const mySecret = process.env['MESSAGE_STYLE'];
  
  if (mySecret === 'uppercase') {
    res.json({"message": "HELLO JSON"});
  } else {
    res.json({"message": "Hello json"});
  }
});

//The challenge is the code below
app.post(req.method, res.path, next.ip) {
  console.log("GET /json - ::ffff:127.0.0.1");
  next();
}






































 module.exports = app;

I would suggest reading docs. The docs call it an Application-level middleware.


  1. You need to app.use() the middleware/function.

  2. The middleware has to run before all other routes. An Application-level middleware runs before all other routes simply by its location before the routes. It is for the same reason 404 routes are often just a catch-all at the end. Anything that wasn’t handled before it can by definition be seen as a 404 (not found).

1 Like

Thanks!! Finally got it, it’s embarrassing how long that took me but I got :sob:

let express = require('express');
let app = express();

app.use((req, res, next) => {
  console.log("GET /json - ::ffff:127.0.0.1")
  next()
})

app.get("/", (req, res) => {
  res.sendFile(absolutePath = __dirname + '/views/index.html');
});

app.use("/public",express.static(__dirname + '/public'));

app.get("/json", (req, res) => {
  const mySecret = process.env['MESSAGE_STYLE'];
  
  if (mySecret === 'uppercase') {
    res.json({"message": "HELLO JSON"});
  } else {
    res.json({"message": "Hello json"});
  }
});








































 module.exports = app;

No, you are hard-coding the values. That is cheating, lol.

The req object has the method , path, and ip properties on it you can use.

Oops LOL…thought I had it, they let me move on and everything, they should’ve been like :no_good_man:

I’m so lost, this section got me feeling dumb, been on this all day. The previous ones weren’t even this bad

let express = require('express');
let app = express();

app.use((req, res, next) => {
  console.log("req.method req.path - req.ip")
  next()
})

app.get("/", (req, res) => {
  res.sendFile(absolutePath = __dirname + '/views/index.html');
});

app.use("/public",express.static(__dirname + '/public'));

app.get("/json", (req, res) => {
  const mySecret = process.env['MESSAGE_STYLE'];
  
  if (mySecret === 'uppercase') {
    res.json({"message": "HELLO JSON"});
  } else {
    res.json({"message": "Hello json"});
  }
});








































 module.exports = app;

Got it!! My last one was close I just needed to put it inside {} like I’ve seen passing props in react. Still confused to what exactly is going on though. Hopefully this isn’t cheating too lol:

app.use((req, res, next) => {
  console.log(`${req.method} ${req.path} - ${req.ip}`);
  next();
});
1 Like