Simple Express Response Hijack/Interceptor Library
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
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.