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
Size: 16
Language: JavaScript
GitHub Committers
User | Most Recent Commit | # Commits |
---|
Other Committers
User | Most Recent Commit | # Commits |
---|
This module uses continuation-local-storage to provide access to objects that are scoped to the lifespan of a request.
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;
It's easy!
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(() => {
...
In the browser you don't need to wrap a function. Just call
RequestLocalStorage.startRequest()
whenever you start a new request.
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;
Need to patch Q
or some other package? No problem!
estLocalStorage.patch(require('cls-q'));
Check out the design doc