loopback-context/README.md

81 lines
2.4 KiB
Markdown
Raw Normal View History

# loopback-context
2016-07-28 13:11:12 +00:00
Current context for LoopBack applications, based on
cls-hooked.
## USAGE WARNING
**Only if you use this package, it's recommended to not run your app using `slc run` or `node .`**
Run using (recommended):
`node -r cls-hooked .`
This uses the `-r` option in order to require `cls-hooked` before your app (see warnings below for more info).
If you wish to use `strong-supervisor`, you would need to pass node options to `slc run`, which currently has issues, according to [strong-supervisor#56](https://github.com/strongloop/strong-supervisor/issues/56).
A less reliable, less recommended way, which instead should be compatible with `strong-supervisor`, would be to add this Javascript line at the first line of your app, and no later than that (**the order of require statements matters**):
`require('cls-hooked')`
Warning: to rely on the order of `require` statements is error-prone.
## INSTALL WARNING
**Only if you use this package, do NOT install your app using `npm install`.**
Install using:
```
npm config set engine-strict true
npm install
```
This keeps you from using Node < v4.5.
2016-07-28 13:40:19 +00:00
## WARNING
2016-08-10 12:16:21 +00:00
**We recommend AGAINST using the loopback-context module until there is a stable solution to the issue below!**
The module node-continuation-local-storage is known to have many problems,
see e.g. [issue #59](https://github.com/othiym23/node-continuation-local-storage/issues/59).
As a result, loopback-context does not work in many situations, as can be
seen from issues reported in LoopBack's
[issue tracker](https://github.com/strongloop/loopback/issues?utf8=%E2%9C%93&q=is%3Aissue%20getCurrentcontext).
The new alternative
[cls-hooked](https://github.com/Jeff-Lewis/cls-hooked) is known to possibly inherit these problems if it's not imported before everything else, that's why you are required to follow the advice above if using this.
2016-07-28 13:40:19 +00:00
## Usage
1) Add `per-request` middleware to your
2016-07-28 13:40:19 +00:00
`server/middleware-config.json`:
```json
{
"initial": {
"loopback-context#per-request": {
2016-07-28 13:40:19 +00:00
}
}
}
```
2) Then you can access the context from your code:
```js
var LoopBackContext = require('loopback-context');
2016-07-28 13:40:19 +00:00
// ...
MyModel.myMethod = function(cb) {
var ctx = LoopBackContext.getCurrentContext();
2016-07-28 13:40:19 +00:00
ctx.get('key');
ctx.set('key', { foo: 'bar' });
});
```
See the official LoopBack
[documentation](https://docs.strongloop.com/display/APIC/Using+current+context)
for more details.