zero icon indicating copy to clipboard operation
zero copied to clipboard

Middleware support

Open sonnht1409 opened this issue 5 years ago • 4 comments

Assume that I have these middlewares like this

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

How do I write it the same way in zero?

Thank you

sonnht1409 avatar Mar 05 '19 04:03 sonnht1409

One way to solve this is to just export your express app:

// ./user.js
const app = require('express')()
var logOriginalUrl = function (req, res, next) {
  console.log('url', req.originalUrl)
  next()
}

var logMethod = function (req, res, next) {
  console.log('method', req.method)
  next()
}

app.use([logOriginalUrl, logMethod])
app.use((req, res)=>{
  res.send("User Info")
})

module.exports = app

asadm avatar Mar 06 '19 19:03 asadm

@asadm do i need to create express app each files?

rosancoderian avatar Mar 10 '19 08:03 rosancoderian

@rosancoderian Another way I personally prefer is calling the middleware directly:

Keeping all middlewares in a separate file:

// ./common/middlewares.js

// MIDDLEWARES
var logOriginalUrl = function (req, res, next) {
  console.log('url', req.originalUrl)
  next()
}

var logMethod = function (req, res, next) {
  console.log('method', req.method)
  next()
}

// Call each middleware and then our handler
module.exports = (req, res, handler)=>{
  logMethod(req, res, ()=>{
    logOriginalUrl(req, res, ()=>{
      handler(req, res)
    })
  })
}

and then use these middlewares in our API:

// ./user.js
const middlewares = require("./common/middlewares")

module.exports = (rq, rs) => middlewares(rq, rs, (req, res)=>{
  res.send("User Info")
})

I wonder if this can be simplified further.

asadm avatar Mar 18 '19 22:03 asadm

You can also create a high order function, like this:

// ./middlewares/logMethod.js
export default function(callback) {
  return (req, res) => {
    console.log('Request method:', req.method)
    callback(req, res);
  }
}


// ./user.js
function handler(req, res) {

}

export default logMethod(handler)

iagobruno avatar Jul 13 '19 07:07 iagobruno