处理传入的post请求时,在nodejs中管道和uppipe

时间:2013-11-18 01:11:13

标签: node.js

考虑以下代码,使用nodejs 0.10.22和expressjs 3.x

app.post('/upload', function(req,res){

    var size = 0;
    var writable = fs.createWriteStream('./example.file');

    req.pipe(writable);
    req.on('data', function(data){
        size += data.length;
        if (size > 1048576) {
            req.unpipe();
            //writable = null;
        }
    })

    res.send('end');
});

当用户上传某些数据(例如文件)时,会创建WriteStream来保存数据

为了限制保存到硬盘的数据量,我有一个'数据'的监听器。当尺寸> 1 Mb,我打电话给req.unpipe()来停止管道。

但是,req保持管道进入可写入状态,最后,example.file将与上传的文件一样大。即使我通过调用writable = null来使writeable无效,req.pipe()仍然将所有数据传递给example.file

我的代码有问题或者这是stream.readable.pipe()方法的错误吗?

1 个答案:

答案 0 :(得分:0)

如果你正在使用它,请尝试将你的“/ upload”路线放在express.bodyParser()之前。