如何中止请求?

时间:2015-08-27 19:23:02

标签: node.js

我正在写一个上传脚本。如果写入磁盘时出错,我想中止请求并返回500状态代码。

我的代码(如下)按预期发送500,但上传不会停止。我一直在"数据"上传完成之前的事件(即使我的写管道已经损坏)然后req.on('end'事件会触发尝试发送204的事件,即使我已经发送了500 }。

如何中止请求以便停止收到事件通知?

var filename = req.headers['wx-filename'];
var docType = req.headers['wx-doc-type'];
var clientId = req.headers['wx-client-id'];

var dir = Path.join(config.storage_path, docType, clientId);
var filePath = Path.join(dir, filename);

mkdirp.sync(dir);

var destFile = FileSystem.createWriteStream(filePath, {
    flags: 'wx' // don't overwrite files
});

if (config.env === 'dev') {
    (function () {
        var fileSize = req.headers['content-length'];
        var uploadedBytes = 0;

        req.on('data', function (data) {
            uploadedBytes += data.length;
            var p = uploadedBytes / fileSize * 100;
            var fn = Path.relative(config.storage_path, filePath);
            util.log(fn + ': ' + p.toFixed(1) + '%');
        });
    })();
}

req.on('end', function () {
    util.log("END");
    resp.writeHead(204);
    resp.end();
});

destFile.on('error', function (err) {
    util.log("ERROR", err);
    resp.writeHead(500, err.code);
    resp.end();
    // HOW TO STOP REQUEST?
});

req.pipe(destFile);

1 个答案:

答案 0 :(得分:2)

<'a>data需要remove the listeners,然后发送end标题,最后发送500错误。