redfin/request-local-storage

Name: request-local-storage

Owner: Redfin

Description: :ribbon: Simple access to objects tied to requests

Created: 2016-03-15 19:32:44.0

Updated: 2018-03-25 09:05:35.0

Pushed: 2017-03-09 21:50:49.0

Homepage:

Size: 16

Language: JavaScript

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

request-local-storage

Build Status NPM version NPM license Powered by Redfin

This module uses continuation-local-storage to provide access to objects that are scoped to the lifespan of a request.

Usage:
Storage access

Use getNamespace to retrieve a module-level object provider.

Note that getNamespace returns a function. It should be called at the module level. The function that's returned must be called for each access.

Example:

t RLS = require('request-local-storage').getNamespace();

tion getInstance() {

// Call `RLS()` to get the _current_ request's local object.
if (!RLS().instance) {
    RLS().instance = new Instance();
}

return RLS().instance;

Request initialization

It's easy!

Server

Say you have a request handling function that looks like:

tion handle(req, res, next) {
...

You can initialize request-local-storage like this:

t RequestLocalStorage = require('request-local-storage');

tion handle(req, res, next) { RequestLocalStorage.startRequest(() => {
...

Browser

In the browser you don't need to wrap a function. Just call RequestLocalStorage.startRequest() whenever you start a new request.

What is Error: RLS() access outside of request!?

It is an error to call the RLS() function returned by getNamespace() outside of a request context. If you see this error it usually means either:

If you are sure that you need to call RLS() from someplace where you don't know ahead of time whether you'll be in a request context or not, you can use the RLS.isActive() helper to check and avoid a try/catch.

t RLS = require('request-local-storage').getNamespace();

tion getCurrentFoo() {
 (RLS.isActive()) {
return RLS().foo;

turn null;

Patching 3rd party packages

Need to patch Q or some other package? No problem!

estLocalStorage.patch(require('cls-q'));
Find out more

Check out the design doc


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.