有人可以向我解释以下行为的原因吗?
我有一个 nodejs/express 网络服务器,假设其中一条发布路由包含以下代码:
req.on('data', function() { console.log('data arrived'); })
此代码按预期工作,并在调用时将“数据到达”消息写入控制台。然而,下面的代码:
setTimeout(function() { req.on('data', function() { console.log('data arrived'); }) }, 1000);
尽管情况相同,但不打印任何内容。如果我们在短时间内订阅他们的事件,请求对象流会发生什么?
我需要这个的原因是我想将大文件上传到我的服务器。当发布请求到达时,我需要创建一个数据库条目并将我的数据通过管道传输到其中。由于数据块的潜在大小,我无法将数据块存储在内存中,但我无法从数据库回调或任何回调中获取请求对象的数据。
你知道如何解决这个问题吗?提前致谢!
更新
以下代码仍然不起作用:
req.pause();
setTimeout(function() {
req.on('data', function(data) { console.log('data arrived'); })
req.resume();
}, 1000);
更新2
最终目标是像这样做 sg :
req.pause();
doSometingAsync(function(result) {
req.on('data', function(data) { doSomethingWithData(data, result) });
req.resume();
});
,但这似乎不起作用......
更新 3
这会导致一个“经过”而没有其他任何东西:
req.pause()
setTimeout () ->
console.log 'elapsed'
req.on 'error', (error) -> console.log error
req.on 'data', (data) -> console.log 'in data'
req.on 'end', () -> console.log 'end'
req.resume()
, 2000