File upload 中止上载导致Sails js/Skipper崩溃

File upload 中止上载导致Sails js/Skipper崩溃,file-upload,sails.js,skipper,File Upload,Sails.js,Skipper,参考: 适配器:skipper gridfs 基本控制器代码: req.file('fileTest') .upload({ // You can apply a file upload limit (in bytes) maxBytes: maxUpload, adapter: require('skipper-gridfs'), uri: bucketConnect, saveAs : func

参考:

适配器:skipper gridfs

基本控制器代码:

req.file('fileTest')
        .upload({

        // You can apply a file upload limit (in bytes)
        maxBytes: maxUpload,
        adapter: require('skipper-gridfs'),
        uri: bucketConnect,
        saveAs : function (__newFileStream,cb) {
            cb(null, __newFileStream.filename);
        }

    }, function whenDone(err, uploadedFiles) {
        if (err) {
            var error = {  "status": 500, "error" : err };
            return res.serverError(error);
        }else {
我有一个jQuery文件上载客户端(),它使用这里描述的jqXHR abort()执行“取消”过程:

客户端中止后,服务器崩溃,并显示以下消息:

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: Request aborted
    at IncomingMessage.onReqAborted (.../node_modules/sails/node_modules/skipper/node_modules/multiparty/index.js:175:17)
    at IncomingMessage.EventEmitter.emit (events.js:92:17)
    at abortIncoming (http.js:1911:11)
    at Socket.serverSocketCloseListener (http.js:1923:5)
    at Socket.EventEmitter.emit (events.js:117:20)
    at TCP.close (net.js:466:12)
我使用了try/catch,但它不起作用,服务器还是崩溃了

我不确定这是一个船长问题还是一个多方问题——我的知识到此为止():

起初,我认为这是jqXHR请求被中止的方式,但这似乎是中止上载时的一个常见跳过问题,因为在上载过程中关闭选项卡的简单动作会使服务器崩溃(不同的消息):


那么,有人看到这种情况发生了吗?有什么解决办法吗?

这个问题在skipper@0.5.4船长-disk@0.5.4


参考资料:

另外,skipper中存在一个问题-gridfs@0.5.3


链接:

我也有同样的问题。显然,它与Skipper磁盘文件适配器()有关。因此,解决方法可能是使用另一个适配器。您也可以使用这个临时解决方案:我不确定:对我来说,这个问题只在我使用GridFS适配器时发生。使用skipper磁盘时,您可以在不使服务器崩溃的情况下剪切上载。我还没有试过skipper-S3,因为我不熟悉AWS吊桶的使用,但这在我的清单上。最后,我发现我的问题与角度而不是帆有关。Angular将序列化要上载的数据,这将使航行崩溃。这里解释了我的角度问题的解决方案:谢谢卢森。如果一个客户端请求可以使sail停止,那么这是一个关键问题。我在他们的Github问题页面上提出了这个问题,但我没有看到任何活动。嗨@mikermcneil,实际上这似乎仍然是个问题。根据49号问题的建议,我正在与
一起解决这个问题。否则,Sails仍将崩溃:-(刚刚重新打开此问题并将尽快查看-感谢您让我知道!这实际上是上载周期引发的最后一个错误。在
中的回调捕获第一个错误后,将引发两个错误。上载
events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: Request aborted
    at IncomingMessage.onReqAborted (.../node_modules/sails/node_modules/skipper/node_modules/multiparty/index.js:175:17)
    at IncomingMessage.EventEmitter.emit (events.js:92:17)
    at abortIncoming (http.js:1911:11)
    at Socket.serverSocketCloseListener (http.js:1923:5)
    at Socket.EventEmitter.emit (events.js:117:20)
    at TCP.close (net.js:466:12)
function onReqAborted() {
    waitend = false;
    self.emit('aborted');
    handleError(new Error("Request aborted"));
  }

  function onReqEnd() {
    waitend = false;
  }

  function handleError(err) {
    var first = !self.error;
    if (first) {
      self.error = err;
      req.removeListener('aborted', onReqAborted);
      req.removeListener('end', onReqEnd);
      if (self.destStream) {
        self.destStream.emit('error', err);
      }
    }

    cleanupOpenFiles(self);

    if (first) {
      self.emit('error', err);
    }
  }
_stream_writable.js:233
    cb(er);
    ^
TypeError: object is not a function
    at onwriteError (_stream_writable.js:233:5)
    at onwrite (_stream_writable.js:253:5)
    at WritableState.onwrite (_stream_writable.js:97:5)
    at Writable.<anonymous> (.../node_modules/skipper-gridfs/index.js:179:25)
    at Writable.g (events.js:180:16)
    at Writable.EventEmitter.emit (events.js:117:20)
    at PassThrough.<anonymous> (.../node_modules/skipper-gridfs/index.js:194:36)
    at PassThrough.g (events.js:180:16)
    at PassThrough.EventEmitter.emit (events.js:117:20)
    at .../node_modules/sails/node_modules/skipper/standalone/Upstream/prototype.fatalIncomingError.js:55:17
var uploadFile = req.file('fileTest');
    console.log(uploadFile);

    uploadFile.upload(function onUploadComplete (err, files) {                // Files will be uploaded to .tmp/uploads

        if (err) return res.serverError(err);                              // IF ERROR Return and send 500 error with error

        console.log(files);
        res.json({status:200,file:files});
    });