README
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.
Installation:
npm install appolo-context --save
Usage
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
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.
import {context} from "appolo-context";
async function doSomethingAsync(){
return context.get("id");
}
Namespace
create(name:string|Symbol):Context
Create new context by given name
import {namespace} from "appolo-context";
let context = namespace.create("someName");
context.initialize();
get(name:string|Symbol):Context
get context by given name
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
import {namespace} from "appolo-context";
let context = namespace.delete("someName");
get context():Context
get the default context
import {namespace} from "appolo-context";
let context = namespace.context;
context.initialize()
Context
initialize()
initialize the async hooks must be called before any get or set methods this will create the async hooks and enable them.
Context
scope(fn:Function)
create new context scope and triggers the given function
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()
destroy the context and clean all resources.
License
MIT