othiym23 / node-continuation-local-storage

implementation of https://github.com/joyent/node/issues/5243
BSD 2-Clause "Simplified" License
1.13k stars 207 forks source link

Access to req, res objects #135

Open samuelbodin opened 6 years ago

samuelbodin commented 6 years ago

From the examples it's not entirely clear to me how I can access data that I pass to the bindEmitter() function. In the code below I use the createServer from the http module. Now my question is, how can I save the request and response objects to later access them from my foo function?

var createNamespace = require('continuation-local-storage').createNamespace;
var session  = createNamespace('some namespace');
var http = require('http');

function foo() {
    // How do I access res/req from here?
}

http.createServer(function (req, res) {
  session.bindEmitter(req);
  session.bindEmitter(res);

  // Call foo without passing in req and res.
  foo();
}).listen(8000);
carlisliu commented 6 years ago
var createNamespace = require('continuation-local-storage').createNamespace;
var session  = createNamespace('some namespace');
var http = require('http');

http.createServer(function (req, res) {
  session.bindEmitter(req);
  session.bindEmitter(res);

  // Call foo without passing in req and res.
  foo();

  function foo() {
      console.log(req, res);
  }
}).listen(8000);

like this?

Qard commented 6 years ago

bindEmitter only ensures continuation through event emitters. It doesn't expose anything to the context.

What you need is to do something like session.set('request', req) and then session.get('request') later.