【发布时间】:2017-08-31 01:35:23
【问题描述】:
我正在尝试创建一个 nodejs 函数,它使用以下代码从文件中读取数据:
app.post('/DownloadData', function(req, res)
{
req.on('data', function(data) {
if (fs.existsSync('demoDataFile.dat')) {
var rstream = fs.createReadStream('demoDataFile.dat');
var bufs = [];
rstream.on('data', function(chunk) {
bufs.push(chunk);
console.log("data");
});
rstream.on('end', function() {
downbuf = Buffer.concat(bufs);
console.log(downbuf.length);
});
}
});
req.on('end', function() {
console.log("end length: " + downbuf.length);
res.end(downbuf);
});
req.on('error', function(err)
{
console.error(err.stack);
});
});
问题是,缓冲区恢复为空,因为 req.on('end' ... 在任何 rstream.on 事件之前被调用("data" 并且长度不会在控制台中打印,直到在打印“结束长度:”之后)。我处理事件是否错误或是否有其他问题?任何指导将不胜感激。
【问题讨论】:
-
什么是
req?还有其他代码对req做任何事情吗? -
对不起,我会修改上面的代码sn-p
-
我删除了 sn-p 的原因是:片段用于 可运行-in-browser 代码。我要再次删除它。只需将代码块用于代码块。
-
既然您使用的是 Express,您是否有理由不使用
res.sendFile()? -
这不是问题,但我很好奇你为什么要等到从请求中获得
data事件才开始读取,因为你没有将数据用于任何事情。 ..还要注意fs.readFile的存在。最后,在打开之前检查是否存在是一种反模式:只需打开,并对“未找到”错误做出反应。 (所有这些都与问题无关。)
标签: javascript node.js fs