cls-session

CLS using async hooks instead of async-listener

Usage no npm install needed!

<script type="module">
  import clsSession from 'https://cdn.skypack.dev/cls-session';
</script>

README

NPM

cls-session

npm version build status install size npm downloads

Continuation Local Storage works like thread-local storage in threaded programming. This is a implementation of CLS using async_hooks instead of async-listener.

Installation

It requires node v8.2.1 or higher for ES2015 and async_hooks support.

$ npm install cls-session

Usage

const Session = require('cls-session')

const session = new Session()

function timeout (id) {
  session.scope(() => {
    session.set('a', id)
    setTimeout(() => {
      const a = session.get('a')
      console.log(a)
    })
  })
}

timeout(1)
timeout(2)
timeout(3)

// Output:
// 1
// 2
// 3

Middleware in koa

import Session from 'cls-session'
import Koa from 'koa'

const app = new Koa()
const session = new Session()

app.use(session.middleware())

app.use(async (ctx, next) => {
  session.set('userId', 10086)
  await next()
})

app.use((ctx) => {
  const userId = session.get('userId')
  ctx.body = userId
})

app.listen(3200)

Middleware in express

import Session from 'cls-session'
import express from 'express'

const app = express()
const session = new Session()

app.use(session.expressMiddleware())

app.use((req, res, next) => {
  session.set('userId', 10086)
  next()
})

app.use((req, res, next) => {
  const userId = session.get('userId')
  res.send(userId)
})

app.listen(3200, () => {
  console.log('Listen 3200')
})

API

session.scope(callback: () => Promise | any): Promise

Create a new context on which values can be set or read.Run all the functions that are called (either directly, or indirectly through asynchronous functions that take callbacks themselves) from the provided callback within the scope.

session.set(key: any, value: any)

Set a value on the current continuation context.

session.get(key: any): any

Get a value on the current continuation context.

session.middleware()

A middleware of koa.

session.expressMiddleware()

A middleware of express.

session.context: Map

session.size: number