节点 – 继续本地存储

我试图使用continuation-local-storage包来从不容易访问的地方访问当前的快速请求/响应。

我创build了以下中间件:

var createNamespace = require('continuation-local-storage').createNamespace, getNamespace = require('continuation-local-storage').getNamespace; const domain = 'ns.cls'; exports.configure = function(app) { createNamespace(domain); app.use(function(req, res, next) { exports.set(req, res, "callcontext", { req, res }); next(); }); }; exports.set = function(req, res, name, value) { var namespace = getNamespace(domain); namespace.bindEmitter(req); namespace.bindEmitter(res); namespace.run(() => namespace.set(name, value)); }; exports.get = function(name) { var namespace = getNamespace(domain); return namespace.get(name); }; exports.getCallContext = function() { return exports.get("callcontext"); }; 

但是当我尝试访问上下文时,它是未定义的:

 var localStorage = require('../middleware/local-storage'); module.exports = function(doc, ctx) { var callContext = localStorage.getCallContext(); console.log("value: " + callContext); }; 

有没有人有任何想法?

提前致谢,

标记

       

网上收集的解决方案 "节点 – 继续本地存储"

应该调用一次createNameSpace。 另外,你有一个错误在线

 exports.set(req, res, "callcontext", { req, res }); 

应该是这样的

 exports.set(req, res, "callcontext", { key: value }); 

这是我使用它的方式:
设置

 var session = require('continuation-local-storage').createNamespace('session') app.use(function(req, res, next) { session.bindEmitter(req); session.bindEmitter(res); session.run(function() { session.set('req', req); next(); }); }); 

要得到

 var session = require('continuation-local-storage').getNamespace('session') session.get('req')