Continuation Local Storage works like thread-local storage in threaded programming. This is a implementation of CLS using async_hooks instead of async-listener.
It requires node v8.2.1 or higher for ES2015 and async_hooks support.
$ npm install cls-session
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
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)
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')
})
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.
Set a value on the current continuation context.
Get a value on the current continuation context.
A middleware of koa.
A middleware of express.