NodeJS Express,添加事务ID
NodeJS Express, adding transaction ids
各位,尝试为每个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模块覆盖了请求和响应函数。一旦你进入数据库调用,你会发现这些对象不再是你期望的样子。我的解决方案是将其拆分为两个单独的函数,这样你就可以显式地将它们传递给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)
};
尝试在promise中设置SomethingfromDB。参考https://www.promisejs.org/或者在设置后尝试分配tid
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('somethingfromDB',result.something);
namespace.set('tid', tid);
next();
});
});
};
希望这对有帮助
相关文章:
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- difference between '$(<%= DDL.ID %>) & $('
- 使用Javascript获取所选选项ID
- 根据id将json数组组合为一个json数组
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 对id以某个字符串开头的元素进行计数
- 如果元素's的ID以数字开头
- 通过id和class属性获取元素
- 根据选项卡内部的文本链接中的哈希ID动态选择jqueryUI选项卡
- 使用当前日期生成随机id
- Javascript-ID冲突的几率
- Href:当前DIV中的目标ID
- 无法获取属性'Id'使用Knockout.js的未定义或空引用API
- Javascript复选框函数:;缺少:在属性id之后"
- node-mssql 事务插入 - 返回插入的 id
- Coturn/turnserver:错误437:分配不匹配:事务ID(WebRTC)错误
- NodeJS Express,添加事务ID
- 如何创建自定义事务ID php
- 按Netsuite事务内部ID搜索
- 如何从JayData事务中获取Last Insert Id