Node.js 流式传输多部分表单时无法发送响应
我使用nodejs结合sailsjs和skipper将文件上传到服务器 我有一个用例,需要检查文件长度,如果上传超过某个文件大小,则发送413错误。然而,当我尝试发送任何类型的响应时,什么都没有发生。这里到底发生了什么?在发送响应之前是否需要完成表单上传Node.js 流式传输多部分表单时无法发送响应,node.js,sails.js,multipartform-data,Node.js,Sails.js,Multipartform Data,我使用nodejs结合sailsjs和skipper将文件上传到服务器 我有一个用例,需要检查文件长度,如果上传超过某个文件大小,则发送413错误。然而,当我尝试发送任何类型的响应时,什么都没有发生。这里到底发生了什么?在发送响应之前是否需要完成表单上传 var getReceiver = function () { var receiver = new Writable({objectMode: true}); receiver._write = functio
var getReceiver = function () {
var receiver = new Writable({objectMode: true});
receiver._write = function (file, enc, done) {
file.fd = directory + file.fd;
var fileStream = fs.createWriteStream(file.fd);
fileStream.on('error', function (err) {
done(err);
}).once('finish', function () {
done();
});
var fileLength = 0;
file.on('data', function (chunk) {
fileLength = fileLength + chunk.length;
if (fileLength > maxFileSize) {
var err = new Error('upload exceeds maxFileSize.');
file.unpipe();
fs.unlink(file.fd, function (fsErr) {
if (fsErr && (typeof fsErr !== 'object' || fsErr.code !== 'ENOENT')) {
return done([err].concat([fsErr]));
}
});
return done(err);
}
});
file.pipe(fileStream);
};
return receiver;
};
req.file('file').upload(getReceiver(), function (err, uploadedFiles) {
if (err) {
return res.badRequest(err);
}
// Do stuff
}
});
});
});
看起来您有多次调用
done
的危险,这可能对情况没有帮助。你应该更加小心done
在4个不同的位置被调用,我怀疑在一个请求过程中可能会运行尽可能多的代码。???我不知道你的意思是什么,这里的cb只在事件侦听器中调用。错误和完成处理程序都可以调用,如果文件长度太大,done
会在那里再次调用。最后,如果取消链接文件失败,将再次调用done
。如果回调可以被多次调用,那么很难解释回调代码。