如何中止请求?

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

我的代码(如下)按预期发送500 ,但上传不会停止。 我一直收到“数据”事件,直到上传完成(即使我的写入pipe道已经断开),然后req.on('end'事件触发了,尽pipe我已经发送了一个500但试图发送204

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

 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); 

你需要删除监听器的dataend ,然后发送一个Connection: close标题,并在最后发送500错误。