【发布时间】:2014-01-11 17:47:03
【问题描述】:
我有代码可以在套接字级别记录到我的 HTTP 服务器的每个连接,并记录任何传入数据。
这段代码最初是为 NodeJS 0.8 编写的,在那里运行良好。
没有,我的项目迁移到 0.10.24 并且套接字日志记录代码停止工作。
这是我的代码:
var netLogStream = fs.createWriteStream('net.log');
(function(f) {
net.Server.prototype.listen = function(port) {
var rv = f.apply(this, arguments); // (1)
rv.on('connection', function(socket) { // (2)
socket.on('data', function(data) {
data.toString().split('\n').forEach(function(line) { // (3)
netLogStream.write('... some logging here ... ' + line);
});
});
});
return rv;
};
})(net.Server.prototype.listen);
在 0.10 上,我可以访问 (1) 并在 (2) 上获得 Socket 实例,但我永远无法访问 (3)。同时我的整个应用程序运行良好,没有任何问题。
添加:我的服务器是用Express@3.4.x创建的
【问题讨论】:
-
你没有在听“听”事件(双关语不是故意的)。
-
@Brandon 为什么我应该这样做?
-
请注意,底层流从 0.8->0.10 发生了很大变化。请参阅:blog.nodejs.org/2012/12/20/streams2 我还不能完全确定您是否需要额外的处理程序与您现在拥有的处理程序,但我会仔细研究一下。
-
@Joe
rv是return value。我确定这是net.Server(this),但现在在文档中找不到任何证据... -
它实际上在 0.10.24 中对我来说似乎工作正常(尽管我正在通过写入标准输出而不是文件进行测试,也许有一些缓冲正在进行?)。你如何测试它是否工作? (gist)。
标签: node.js sockets eventemitter