Calling a function inside route handler vs using a middleware

Issue

I am trying to understand if there is any difference. I’ll try to explain it with an example from express docs: https://expressjs.com/en/guide/using-middleware.html

function logOriginalUrl (req, res, next) {
  console.log('Request URL:', req.originalUrl)
  next()
}

function logMethod (req, res, next) {
  console.log('Request Type:', req.method)
  next()
}

const logStuff = [logOriginalUrl, logMethod]
app.get('/user/:id', logStuff, (req, res, next) => {
  res.send('User Info')
})

logOriginalUrl and logMethod are middlewares in this example. What would happen if I write it like:

function logOriginalUrl() {
  console.log('Request URL:', req.originalUrl);
}

function logMethod() {
  console.log('Request Type:', req.method);
}

app.get('/user/:id', (req, res, next) => {
  logOriginalUrl();
  logMethod();
  res.send('User Info')
})

Is there any difference between these two? This is a very simple example but it can be applied for any other example where you have to manipulate req or do anything else.

What is the difference between a middleware and calling + awaiting a function inside route handler?

Theoretically, anything I can do as middleware, I feel like I can achieve exact same thing by awaiting same function in route handler function. So, what do I miss?

Solution

Your second code will throw an error because req is undefined in the scope of logOriginalUrl and logMethod.

But if you would pass this data correctly, there would be absolutely no difference. Middlewares are for convenience.

They are used to handle common scenarios betweem routes and make the code more readable.

Answered By – Konrad Linkowski

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published