Node.js 流式传输多部分表单时无法发送响应

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

我使用nodejs结合sailsjs和skipper将文件上传到服务器

我有一个用例,需要检查文件长度,如果上传超过某个文件大小,则发送413错误。然而,当我尝试发送任何类型的响应时,什么都没有发生。这里到底发生了什么?在发送响应之前是否需要完成表单上传

    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
。如果回调可以被多次调用,那么很难解释回调代码。