appolo-context
v6.0.9
Published
async hooks context storage
Downloads
288
Maintainers
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