var express = require('express');
var app = express();
var http = require('http');
var continuationLocalStorage = require('continuation-local-storage');
var namespace = continuationLocalStorage.createNamespace('namespace');
app.use(function (req, res, next) {
namespace.run(function () {
namespace.set('gtid', 'some unique value');
return next();
});
});
var req = protocol.request(request, function (response) {
response.setEncoding('utf-8');
var responseBody = '';
response.on('data', function (data) {
responseBody += data;
});
response.on('error', function (e) {
e.code = response.statusCode;
return callback(e);
});
response.on('end', function () {
return callback(null, responseBody);
});
});
req.on('socket', function (socket) {
if (!socket.name) {
socket.name = new Date().getTime();
socket.on('close', function () {
var namespace = getNamespace('namespace');
console.log(namespace.get('gtid'))
});
}
});
req.on('error', function (e) {
return callback(e);
});
if (request.body) {
req.write(request.body);
}
req.end();
We are creating the namespace and setting a variable called
gtidin one of the middle ware and then trying to read that value for logging. We are getting the values in most of the places but some places it'sundefined. One of the place is in the callback of the socket close event. Below is the code to provide some context.