Simple connect middleware to wrap the request handling in a domain and set and access data for the current request lifecycle only.
npm install request-contextSee the Domain Docs for further information on error handling
for domains. Note that the domain module is pending deprecation!
``sh`
$ npm install request-context
server config in app.js:
`js
const app = express();
const contextService = require('request-context');
// wrap requests in the 'request' namespace (can be any string)
app.use(contextService.middleware('request'));
// set the logged in user in some auth middleware
app.use(function (req, res, next) {
User.findById(req.cookies._id, (err, user) => {
// set the user who made this request on the context
contextService.set('request:user', user);
next();
});
});
// save a model in put requests
app.put(function (req, res, next) {
new Model(req.body).save((err, doc) => res.json(doc));
});
// always use an default express/connect error handling middleware
// it will be called if any errors occur in the domain
// see http://expressjs.com/en/guide/error-handling.html
app.use(function (err, req, res, next) {
res.status(err.status || 500);
});
// start server etc.
[...]
`
In the Model definition file:
`js
var contextService = require('request-context');
[...]
// set the user who made changes to this document
// note that this method is called async in the document context
modelSchema.pre('save', function (next) {
// access the user object which has been set in the request middleware
this.modifiedBy = contextService.get('request:user.name');
// or this.modifiedBy = contextService.get('request').user.name;
next();
});
`
Also available on the github pages.
- middleware`
Returns a function that can be used as connect middleware. Takes a string as the name of the namespace as its argument. All functions called after this middleware, async or not, will have read/write access to the context.js`
var middleware = require('request-context').middleware;
app.use(middleware('some namespace'));
- set, setContext`
Set the context for a key on the context created by the middleware.js`
var contextService = require('request-context');
contextService.set('namespace:key', {some: 'value'});
contextService.set('namespace:key.some', 'other');
- get, getContext`
Get the context for a key on the context created by the middleware.js`
var contextService = require('request-context');
contextService.get('namespace:key.some'); // returns 'other'
`js
var contextService = require('request-context');
// set an object on the namespace
contextService.set('namespace:character', {
name: 'Arya Stark',
location: {
name: 'Winterfell',
region: 'North'
}
});
// this will return the complete object
var char = contextService.get('namespace:character');
// work with the object
var region = char.location.region;
// this will return 'Arya Stark'
contextService.get('namespace:character.name');
// this will set the region to 'Westeros'
contextService.set('namespace:character.location.region', 'Westeros');
`
The documentation is available on the github pages.
To generate the jsdoc documentation run
`bash`
$ gulp docs
To run the packaged tests:
`bash``
$ gulp test