[NodeJS] Simple Express Response Hijack/Interceptor Library
Tags: node, npm, webdev, javascript
Published: 2021-05-27 12:13:34

---
title: [NodeJS] Simple Express Response Hijack/Interceptor Library
published: true
description: Simply hijack or intercept your express response via middleware.
tags: NodeJS, NPM, Webdev, Javascript
//cover_image: https://images.unsplash.com/photo-1597773491049-a8fb7e37537e?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxMTc3M3wwfDF8c2VhcmNofDE4fHxzd2l0Y2h8ZW58MHx8fHwxNjIyMTE2NDAz&ixlib=rb-1.2.1&q=80&w=2000
---

So this is a short introduction about my **express-multi-hijack** library that I just published a few minutes ago. [express-multi-hijack](https://www.npmjs.com/package/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 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

## 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

```js
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)
```

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

### Intercept / Hijack Response Body

```js
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)
```

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

```js
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)
```

The code above will intercept and change response for [localhost:8080/monday](http://localhost:8080/monday) to `{today: 'Moday', message: 'What a lazy day'}`, and [localhost:8080/friday](http://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](https://github.com/slaveofcode/express-multi-hijack/tree/master/example) directory.

[This post originally published here](https://kresna.dev/simple-express-response-hijack-interceptor/)