Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Session gets lost if nesting promises #116

Open
alexandruluca opened this issue May 5, 2017 · 4 comments
Open

Session gets lost if nesting promises #116

alexandruluca opened this issue May 5, 2017 · 4 comments

Comments

@alexandruluca
Copy link

I'm using this package to create a session for the current user so I can access session inside nested promises, including mongoose plugins and so on. For whatever reason, the namespace exists too quick and the session get's lost.

I debugged your code a little bit and I came up with this solution for my problem. In context.js line 44 in the Namespace.prototype.run method I patched it like this

Namespace.prototype.run = function (fn) {
  var context = this.createContext();
  this.enter(context);
  try {
    var contextFnResult = fn(context);
	  return context;
  }
  catch (exception) {
    if (exception) {
      exception[ERROR_SYMBOL] = context;
    }
    this.exit(context);
    throw exception;
  }
  finally {
    context.res.on('finish', function() {
		this.exit(context);
    });
  }
};

Basically I simply exit the namespace on an error and always exit on response finish

context.res.on('finish', function() {
		this.exit(context);
    });

This way I am sure that my session is active untill I send back my response to the client

This works for me as intended. Are there any cons to this approach? Looking forward to your feedback

@AleksMeshkov
Copy link

AleksMeshkov commented Aug 23, 2017

Had to use almost the same approach.

AleksMeshkov@7eee8cf

@zsteinkamp
Copy link

@AleksMeshkov have you opened a pull request? This will be a problem for anyone using CLS with express.

@sonicoder86
Copy link

@othiym23 Do we need a test for @AleksMeshkov s fix in a pull request?

@Qard
Copy link
Collaborator

Qard commented Nov 1, 2017

Have you tried using ns.bindEmitter(res)?

Seems likely there is a branch of the execution tree that CLS is not aware of, resulting in the tree resolving early and exiting when some activity is still pending. The most likely cause of that is event emitters as they are not patched automatically.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants