Node Request Context
Node request context let you save any context per request and easily retrieve it.
Read my blog post about building the package on MediumAttention! 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.
Install
npm install node-request-context
Usage
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
```javascript
const { getNamespace } = require('node-request-context');
const namespace = getNamespace('myapp.mynamespace');
class A {
foo() {
const tid = namespace.get('tid')
}
}
Example
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
Author
Guy SegevEmail | LinkedIn
Contributing
- 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