Simple Express Response Hijack/Interceptor Library

NodeJS 27 Mei 2021

So this is a short introduction about my express-multi-hijack library that I just published a few minutes ago (according to the time when I wrote this blog post). express-multi-hijack is a simple express middleware for hijacking or intercept Your HTTP or API responses.

It's based on my experience when I want to intercept the JSON Api response. This library might be useful for your use-case with your NodeJS or Typescript project (yes, it is typescript friendly) when it needs an interception on response body.

Installation

npm i express-multi-hijack
install npm library

How It Works

This library works by overriding res.end function, still maintaining the original one once all of the "hijack" functions are executed.

So it is safe to use with Your own custom res.end implementation.

Some Examples

  • Simple Tracing Response Body
const Express = require('express');
const { Hijack } = require('express-multi-hijack');

const app = Express()

app.use(Hijack({
  json: true,
  handler: (body, req, res, next) => {
    console.info('got response body', body) // { "foo": "bar" }
  }
}))

app.get('/bar', (req, res, next) => {
  res.json({
    bar: 'foo',
  })
})

app.get('/foo', (req, res, next) => {
  res.json({
    foo: 'bar',
  })
})

app.listen(8080)
Example code for Tracing Response Body

Based on the example above, the hijack handler will print `{ "foo": "bar" }` on request to localhost:8080/foo and `{ "bar": "foo" }` when requesting to localhost:8080/bar.

  • Intercept / Hijack Response Body
const Express = require('express')
const { Hijack } = require('../dist')

const app = Express()

app.use(Hijack({
  json: true,
  handler: (body, _, res) => {
    console.info('body:', body)
    res.json({ message: 'Today is the bad day' })
  }
}))

app.get('/', (_, res) => {
  return res.json({ message: 'Today is a Great Day!' })
})

app.listen(8080)
Example code for Hijack Response 

The code above will change the response message from 'Today is a Great Day!' to 'Today is the bad day'

  • Multiple Hijack, early hijack function got highest priority
const Express = require('express')
const { Hijack } = require('../dist')

const app = Express()

// hijack on monday
app.use(Hijack({
  json: true,
  handler: (body, _, res) => {
    if (body.today === 'Monday') {
      res.json({
        ...body,
        message: 'What a lazy day'
      })
    }
  }
}))

// hijack on friday
app.use(Hijack({
  json: true,
  handler: (body, req, res) => {
    if (req.path === '/friday') {
      res.json({
        ...body,
        message: 'What a wondeful day'
      })
    }
  }
}))

app.get('/', (_, res) => res.json({ message: 'No Hijack' }))

app.get('/monday', (_, res) => {
  return res.status(200).json({ today: 'Monday', message: 'Today is a Great Day!' })
})

app.get('/friday', (_, res) => {
  return res.status(200).json({ message: 'Today is a Great Day!' })
})

app.listen(8080)
Example code for Multiple Hijack Middleware

The code above will intercept and change response for localhost:8080/monday to {today: 'Moday', message: 'What a lazy day'}, and localhost:8080/friday to {message: 'What a wondeful day'}

That's all, thank you for reading my post, for more code examples You can visit the example directory.

Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.