/node-request-context

A package to keep a context object per request for Node.js > 8.9

Primary LanguageJavaScriptMIT LicenseMIT

npm version Build Status Known Vulnerabilities

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 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.

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

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

  1. Clone this repo
  2. Make sure node > 8.9.0 is installed
  3. Run npm run example
  4. Open another terminal tab and run curl localhost:8080

Author

Guy Segev

Email | LinkedIn

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request