首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >失败的上传会导致Sails js/Skipper崩溃

失败的上传会导致Sails js/Skipper崩溃
EN

Stack Overflow用户
提问于 2014-11-12 20:41:29
回答 2查看 1.3K关注 0票数 5

参考文献:https://github.com/balderdashy/skipper/issues/49

适配器:

基本控制器代码:

代码语言:javascript
复制
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客户端( https://blueimp.github.io/jQuery-File-Upload/ )通过使用此处描述的jqXHR中止(https://github.com/blueimp/jQuery-File-Upload/wiki/API )来影响“取消”过程:

代码语言:javascript
复制
$('button.cancel').click(function (e) {
    jqXHR.abort();
});

客户端中止后,服务器将崩溃,其中包含以下消息:

代码语言:javascript
复制
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,但它没有工作,服务器无论如何都会崩溃。

我不确定这是船长问题还是多方问题--我的知识到此为止( https://github.com/andrewrk/node-multiparty/blob/master/index.js ):

代码语言:javascript
复制
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);
    }
  }

起初,我以为jqXHR请求是这样中止的,但这似乎是中止上传时的一个一般的跳过问题,因为在上传过程中关闭选项卡的简单操作将使服务器崩溃(不同的消息):

代码语言:javascript
复制
_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

我尝试通过关闭选项卡来中止上传,同时使用简单的上载控制器(而不是跳过),并且没有崩溃:

代码语言:javascript
复制
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});
    });

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-02 22:20:14

这个问题已经在skipper@0.5.4和skipper-disk@0.5.4中得到了解决。

参考文献:https://github.com/balderdashy/skipper/issues/49

票数 1
EN

Stack Overflow用户

发布于 2016-03-15 12:48:21

此外,船长-gridfs@0.5.3中也存在一个问题。

链接:https://github.com/willhuang85/skipper-gridfs/issues/20

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26896144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档