2017-06-09 9 views
1

私はトランザクションをトレースしたいクライアントとサーバーサイドフレームワーク(NodeJs)を構築しています。 私はクライアントとサーバーの間でヘッダー(transaction_id)を渡すことができますが、transaction_idを自動的に設定できるようにしたいと考えています。 これは、ヘッダーが定義されている場合、ミドルウェアはダウンストリーム呼び出しで読み取ることができるようにコンテキスト内でトランザクションIDを読み取って設定できる必要があることを意味します。NodeJsでトランザクション・トレーシングを実装するためのダイナミック・スコープの作成方法は?

ビルラッパーは質問の範囲外です。私が苦労しているのは、スコープを動的に作成し、そこに値を格納できることです。

注 - ノードの動的スコープを許可しない 'strict'モードを使用しています。だから別の方法が必要です。 注 - 私は、プロミスを使用してクライアント/サーバの呼び出しを行っています。

は私がに私たちを可能にCLSを使用 - 私は最終的にそれを解決する方法

+0

あなたがここで求めていることを理解することは本当に難しいです。良い質問をする方法のガイドラインをお読みください。 –

答えて

3

をあなたを助けモジュールcontinuation local storage

希望をされ使用しませんダイナミックスコープを追跡します。 CLSの周りのすべてのテキストを読む

はので、ここで、しばらく時間がかかった私は(素人の用語)何をしたかをまとめたものである

NOTE - 私は「厳格な」モードでNodeJsを使用しています。つまり、動的スコープは使用できません。その生産システムを考えると、私は厳格なモードを保ちたいと思う。それゆえ、動的スコープを達成する別の方法です。

1)CLSは動的コンテキスト/スコープを作成します。これにより、作成されたスコープ内に入るまでしか見えないキーと値のペアを設定/取得できます。

2)私はBluebird's Promisesを使用しているため、CLSはPromises内でコンテキスト/スコープを利用できるようにパッチを使用する必要がありました。 https://www.npmjs.com/package/cls-bluebird

3)CLSを約束して使用すると、時間がかかりました。ここでは、さまざまな図書館が異なる成果を生み出すためにCLSをどのように使用したかについての素晴らしい議論があります。

var cls = require('continuation-local-storage'); 
var clsbluebird = require('cls-bluebird'); 
var namespace = cls.createNamespace('ns'); 
clsbluebird(namespace); 

var result; 
namespace.run(function() { 
    namespace.set('key', 'value'); 
    result = abc(); // returns 'value' 
}); 

// versus doing – 
result = abc(); // returns undefined 

function abc() { 
    return namespace.get('key'); 
} 

5)ユースケース - - これは私がCLS(言い換えと単純化された)を用いる方法である https://github.com/TimBeyer/cls-bluebird/issues/6

4)このように、私は、トランザクションの基本的なトレースを実施しました。例えば。 NewRelic、Traceなど

1

Sequelize、最も人気のORMの一つは、これは

ここ
+0

ありがとうShivam。これはまさに私が必要としていたものです。 – ra9z

+0

助けてくれてありがとう あなたはそれに答えるようにマークすることができます 誰かがつまずくと、 – Shivam

関連する問題