Node request context let you save any context per request and easily retrieve it. Read my blog post about building the package on Medium
Attention! This package is using the new async hooks API, which is available from Node 8.9.0, but still experimental. It is strongly recommended NOT to use in production environments.
npm install node-request-context
Node request context behaves pretty similar to continuation-local-storage.
const http = require('http');
const uuid = require('uuid');
// Create a namespace
const { createNamespace } = require('node-request-context');
const namespace = createNamespace('myapp.mynamespace');
http.createServer(function (req, res) {
// Wrap your request with namespace.run
namespace.run(() => {
const transactionId = uuid.v1();
// Set any variable using the set function
namespace.set('tid', transactionId);
someAsyncFunc.then((data) => {
// Get your variable using namespace.get
console.log('Some message', { transactionId: namespace.get('tid') });
res.end(data);
}).catch((err) => {
console.log(err.message, { transactionId: namespace.get('tid') });
});
});
}).listen(8079);
You can retrieve any context variable in any other file
const { getNamespace } = require('node-request-context');
const namespace = getNamespace('myapp.mynamespace');
class A {
foo() {
const tid = namespace.get('tid')
}
}
To run a working example
- Clone this repo
- Make sure node > 8.9.0 is installed
- Run
npm run example
- Open another terminal tab and run
curl localhost:8080
Guy Segev
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request