在Node.js中的createReadStream中替换数据

时间:2012-04-10 21:52:32

标签: node.js

我不确定我在这里问正确的问题......所以请不要攻击我。

我正在为一种跟踪实现创建自己的异步回调库。用户必须在其网站上安装一段包含唯一帐号的代码。想想谷歌分析。

库调用到达我的节点服务器并传递查询参数中的帐户ID。

节点使用分析库进行响应,因此可以在用户的​​站点上调用各种跟踪功能。

我的问题是,如何根据查询参数修改流式传输回用户页面的静态跟踪库?例如,一旦从查询字符串中读取帐户ID,我会进行数据库查找,以查找库中特定于该用户的某些值,并希望适当地修改库中的特定函数。

我正在通过以下方式读取本地服务器上的静态文件:     fs.createReadStream( “./ file.js”);

如何修改该文件以替换其他值?

或者我应该在启动时将文件读入内存中的对象,然后通过响应对象简单地写出修改后的数据?

1 个答案:

答案 0 :(得分:0)

你可以简单地使用 eco ejs 模板,但是为了得到一个想法或者如果你想自己做这个,我想你应该做一个模板基于您的file.js,然后使用一组正则表达式使用corersponding数据编写代码的用户特定部分。

例如:

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);
}

<强>更新

尽可能考虑缓存......