JSPM

hono-http-context

1.3.1
    • ESM via JSPM
    • ES Module Entrypoint
    • Export Map
    • Keywords
    • License
    • Repository URL
    • TypeScript Types
    • README
    • Created
    • Published
    • Downloads 8
    • Score
      100M100P100Q34318F
    • License ISC

    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 can easily manage and share state across asynchronous operations within your Hono.js application, making it ideal for handling request-scoped data, user sessions, and more. This package ensures a seamless and straightforward way to propagate context throughout your app, improving code maintainability and simplifying complex workflows.

    Package Exports

    • hono-http-context
    • hono-http-context/index.js

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (hono-http-context) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    npm npm

    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:

    1. Make sure you require hono-http-context in the first row of your app. Some popular packages use async which breaks CLS.