【发布时间】:2017-12-04 18:04:19
【问题描述】:
简而言之:可以将日志(通过整个节点 API)与某个(动态)引用 ID 相关联吗?
[进一步解释]
所以,情况是这样的:我正在编写一个可能一次处理多达数百个请求的 API。它在 Node.js 和 Express 中实现。我在整个 API 中都有大量日志记录,每个日志都必须有一个唯一的参考 ID,以便我可以将多个日志与同一个请求相关联。
我可以做到这一点的一种方法是随机生成一个字符串并将其作为参数传递给每个函数调用(我将其保留为最后的手段)。 我不想这样做
重申一下,
- 请求进来
- 随机生成字符串:
aljsndci.json - 附加(Express)request.body 到
aljsndci.json - 在 API 中做内部逻辑
- json格式的日志,每条日志必须包含key
{ ... file: 'aljsndci.json' ... }
- json格式的日志,每条日志必须包含key
- 附加(快速)回复
aljsndci.json - 通过快递回复
我偶然发现了像continuation-local-storage 这样的解决方案,但是,如何生成一个唯一的字符串(用于命名空间),然后在以后引用相同的字符串?这里的所有示例都对命名空间的字符串进行了硬编码。有没有例子,和这里的类似(找到here)
var getNamespace = require('continuation-local-storage').getNamespace;
var session = getNamespace('my session');
var render = require('./lib/render.js')
function finish(response) {
var user = session.get('user');
render({user: user}).pipe(response);
}
从现在开始,它实际上调用了一系列回调的名称,而不是var session = getNamespace('my session');?类似var thisNamespace = getNamespace(this);
基本上,如果我可以为每个后续回调设置一个global 变量,那将解决这个问题
【问题讨论】:
-
使用 Express.js,req 在每个中间件中都可用。例如,您可以通过将生成的唯一 ID 放入 req.uniqueId 来使用它。
标签: node.js node-local-storage