async hooks context storage
npm install appolo-context
nodejs async hooks context storage
can be used to create context per request
> Attention! This package is using the new experimental async hooks API.
``javascript`
npm install appolo-context --save
javascript
import {namespace} from "appolo-context";let context = namespace.create("someName");
context.initialize();
class A {
run(){
let context = namespace.get("someName")
context.set("id","someId")
return Promise.resolve();
}
}
class B {
run(){
let context = namespace.get("someName")
let id = context.get("id");
return Promise.resolve(id);
}
}
context.scope(async()=>{
await new A().run();
let id = await new B().run();
console.log(id) // someId
})
`Express Usage
`javascript
import {context} from "appolo-context";
import * as express from "express";context.initialize();
let app = express();
app.use((req,res,next)=>{
context.scope(()=>{
context.set("id",uuid.v1());
next();
})
})
app.use(async (req,res,next())=>{
let reuslt = await doSomethingAsync();
res.send(reuslt)
})
`
Now you can retrieve the context in any file or function.
`javascript
import {context} from "appolo-context";async function doSomethingAsync(){
return context.get("id");
}
`$3
####
create(name:string|Symbol):Context
Create new context by given name
`javascript
import {namespace} from "appolo-context";let context = namespace.create("someName");
context.initialize();
`####
get(name:string|Symbol):Context
get context by given name
`javascript
import {namespace} from "appolo-context";let context = namespace.get("someName");
context.get("someValue")
`####
delete(name:string|Symbol)
delete context by given name and destroy it
`javascript
import {namespace} from "appolo-context";let context = namespace.delete("someName");
`####
get context():Context
get the default context
`javascript
import {namespace} from "appolo-context";let context = namespace.context;
context.initialize()
`$3
#### initialize()
initialize the async hooks must be called before any get or set methods
this will create the async hooks and enable them.$3
#### scope(fn:Function)
create new context scope and triggers the given function
`javascript
import {context} from "appolo-context";
import * as express from "express";context.initialize();
let app = express();
app.use((req,res,next)=>{
context.scope(()=>{
context.set("id",uuid.v1());
next();
})
})
`####
get(key:any):any
get context value by key####
set(key:any,value:any)
set context value by key####
enable()
enable the async hooks####
destroy()`