0

ここで正しい質問をしているのかよくわかりません...だから私を攻撃しないでください。

あるタイプの追跡実装用に、独自の非同期コールバックライブラリを作成しています。ユーザーは、一意のアカウント番号を含むコードをサイトにインストールする必要があります。GoogleAnalyticsを考えてください。

ライブラリ呼び出しはノードサーバーに到達し、クエリパラメーターでアカウントIDを渡します。

ノードは分析ライブラリで応答するため、ユーザーのサイトでさまざまな追跡機能を呼び出すことができます。

私の質問は、クエリパラメータに基づいてユーザーのページにストリーミングされる静的追跡ライブラリをどのように変更できますか?たとえば、アカウントIDがクエリ文字列から読み取られたら、DBルックアップを実行して、そのユーザーに固有であり、ライブラリ内の特定の関数を適切に変更したいライブラリ内の値を見つけます。

ローカルサーバーから静的ファイルを次のように読み取っています:fs.createReadStream( "./ file.js");

そのファイルを変更して、内の特定の値を他の値に置き換えるにはどうすればよいですか?

または、起動時にファイルをメモリ内オブジェクトに読み込んでから、応答オブジェクトを介して変更されたデータを単純に書き出す必要がありますか?

4

1 に答える 1

0

これには単純にecoまたはejsテンプレートを使用できますが、アイデアがある場合、またはこれを自分で作成する場合は、テンプレートに基づいてテンプレートを作成file.jsし、対応するデータを使用してコードのユーザー固有の部分を記述する必要があると思います一連の正規表現を使用します。

例えば:

template.js

var get_user = function () {
  return "Hi %%USER_NAME%%"
}

次に、req.send()` template.jsの内容を次のように置き換えます。

var result = cached_template_data;
if (!result) {
  fs.readFile("./template.js", function (err, data) {
    result = cached_template_data = data;
    if (!err) {
      result = result.replace(/%%USER_NAME%%/g, user.name)
      res.send(result);
    } else {
      // Big oops
      res.send({error:true}, 500);
    }
  })
} else {
  result = result.replace(/%%USER_NAME%%/g, user.name)
  res.send(result);
}

アップデート

ちなみに、可能な限りキャッシュを検討してください...

于 2012-04-11T01:10:28.693 に答える