[NodeJS] Simple Express Response Hijack/Interceptor Library
Aditya Kresna
Posted on May 27, 2021
So this is a short introduction about my express-multi-hijack library that I just published a few minutes ago. 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
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 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)
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)
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.
Posted on May 27, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.