hono-http-context
v1.3.1
Published
The hono-http-context package is a lightweight and efficient library designed to provide context management for Hono.js applications, similar to how cls-hooked and express-http-context work for Node.js and Express applications. With hono-http-context, you
Downloads
6
Maintainers
Readme
Hono HTTP Context
Get and set request-scoped context anywhere. This is just an unopinionated, idiomatic HonoJS implementation of cls-hooked (forked from continuation-local-storage). It's a great place to store user state, claims from a JWT, request/correlation IDs, and any other request-scoped data. Context is preserved even over async/await (in node 8+).
Please checkout the express version : express-http-context
How to use it
Install: npm install --save hono-http-context
Use the middleware immediately before the first middleware that needs to have access to the context. You won't have access to the context in any middleware "used" before this one.
Note that some popular middlewares (such as body-parser, hono-jwt) may cause context to get lost. To workaround such issues, you are advised to use any third party middleware that does NOT need the context BEFORE you use this middleware.
import hono from 'hono'
import httpContext from 'hono-http-context'
const app = hono()
// Use any third party middleware that does not need access to the context here, e.g.
// app.use(some3rdParty.middleware);
app.use(httpContext.middleware)
// all code from here on has access to the same context for each request
Set values based on the incoming request:
// Example authorization middleware
app.use(async (c, next) => {
const token = c.req.header('Authorization')
if (token) {
httpContext.set('user', { id: '123' })
}
await next()
})
Get them from code that doesn't have access to the hono req
object:
import httpContext from 'hono-http-context'
// Somewhere deep in the Todo Service
function createTodoItem(title, content, callback) {
const user = httpContext.get('user')
db.insert({ title, content, userId: user.id }, callback)
}
You can access cls namespace directly as (it may be useful if you want to apply some patch to it ):
import { ns } from 'hono-http-context'
Troubleshooting
To avoid weird behavior with hono:
- Make sure you require
hono-http-context
in the first row of your app. Some popular packages use async which breaks CLS.