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

Context gets lost in promise when deployed as a serverless app #134

Open rajasekhar911 opened 6 years ago

rajasekhar911 commented 6 years ago

I have a NodeJS application using Node8 and Express 4. Am using CLS to store an API token at the time of login and to retrieve the token further down the line. This token is in session and is set to CLS on every request (so that I dont have to pass the request object to each and every method) so that I can retrieve it at a later time in the nth function.

app.use(function(req, res, next) {
  var getNamespace = require('continuation-local-storage').getNamespace,
  authSession = getNamespace('authSession');
  var token = "";
  if(req.session && req.session.auth){
    token = req.session.auth.token;
  }
  authSession.bindEmitter(req);
  authSession.bindEmitter(res);

  authSession.run(function() {
    authSession.set('authToken', token);
    next();
  });
});

This is working fine as a node js app. But when I try to run it as a serverless app, the context does not seem to be set properly. Am using serverless-http package.

I tried to put the patch mentioned in issue 116 ( [https://github.com/othiym23/node-continuation-local-storage/issues/116] ). But the interesting part is context.res is undefined in the finally block.

How can I proceed fixing this?

patran commented 5 years ago

Did you find a way forward?

rajasekhar911 commented 5 years ago

check out this commit.. https://github.com/rajasekhar911/node-continuation-local-storage/commit/ca6fede72c3da4da68582912e485cc674552407d