Home > Software design >  Calling a function inside route handler vs using a middleware
Calling a function inside route handler vs using a middleware

Time:08-22

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?

CodePudding user response:

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.

  • Related