gpt4 book ai didi

javascript - NodeJS Express,添加事务 ID

转载 作者:太空宇宙 更新时间:2023-11-03 22:36:59 24 4
gpt4 key购买 nike

各位, 尝试为每个 api 调用设置一个事务 ID。作品如下:

var cls = require('continuation-local-storage');
var uuid = require('node-uuid');
var namespace = cls.createNamespace('foo');

var tokenMiddleware = function tokenMiddleware(req, res, next){

namespace.bindEmitter(req);
namespace.bindEmitter(res);
namespace.run(function() {
namespace.set('tid', tid);
next();
});

};

现在,当我尝试添加附加信息(从 mongo 返回)时,它会丢失上下文:

var cls = require('continuation-local-storage');
var uuid = require('node-uuid');
var namespace = cls.createNamespace('foo');

var tokenMiddleware = function tokenMiddleware(req, res, next){

mongo.fetchId(authId, function (result) {

namespace.bindEmitter(req);
namespace.bindEmitter(res);
namespace.run(function() {
namespace.set('tid', tid);
namespace.set('somethingfromDB',result.something);
next();
});

});
};

事务 ID 无法进一步使用,其未定义...为什么第一个示例可以工作,而第二个示例却不能?

我做错了什么?我怀疑这个问题与 next() 上下文有关。 Express v4。

谢谢!

最佳答案

我在使用express时也遇到过类似的问题。据我所知,mongo 模块覆盖了请求和响应函数。一旦进入数据库调用,您就会发现这些对象不再是您期望的那样。我的解决方案是将其分成 2 个独立的函数,这样您就可以将它们显式传递给 db 函数。

var tokenMiddleware = function tokenMiddleware(req, res, next){

var callDB = function (req, res, namespace) {
mongo.fetchId(authId, function (result) {

namespace.bindEmitter(req);
namespace.bindEmitter(res);
namespace.run(function() {
namespace.set('tid', tid);
namespace.set('somethingfromDB',result.something);
next();
});
});
});
callDB(req, res, namespace)
};

关于javascript - NodeJS Express,添加事务 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25982818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com