【问题标题】:node.js:Request aborted at IncomingMessage.onReqAborted multiparty in sails.js frameworknode.js:在sails.js框架中的IncomingMessage.onReqAborted多方请求中止
【发布时间】:2017-09-21 08:31:28
【问题描述】:

我在 node.js 中有文件上传系统,带有多方包

        var gm          = require('gm').subClass({imageMagick: true});
        var multiparty  = require('multiparty');

        var form        =  new multiparty.Form();

        var s3          =  sails.config.aws.main();

        var options     = {
            partSize: 5242880, queueSize: 1
        }
        form.parse(req, function(err, fields, files) {

            gm(files.fileToUpload[0].path)
                .resize(200,200,'^')
                .stream(function (err,buffer) {

                    s3.upload({
                        Bucket:'mybucket',
                        Body:buffer,
                        Key:'artwork-croppedimages/test.jpg'
                    },options,function(err, data) {
                        console.log("upload error",err);
                        console.log("data",data);
                    });

                 })

        });

它工作正常,但当上传通常大于 20 MB 的较大文件时,我收到此错误

Error: Request aborted
    at IncomingMessage.onReqAborted (/var/www/node/cushbuart/node_modules/multiparty/index.js:183:17)
    at emitNone (events.js:86:13)
    at IncomingMessage.emit (events.js:188:7)
    at abortIncoming (_http_server.js:381:9)
    at socketOnClose (_http_server.js:375:3)
    at emitOne (events.js:101:20)
    at Socket.emit (events.js:191:7)
    at TCP._handle.close [as _onclose] (net.js:511:12)

我知道它可以通过增加超时来解决,但我不知道如何在sails.js 框架中使用

【问题讨论】:

    标签: node.js sails.js multiparty


    【解决方案1】:

    请求超时是 Node.js 的一个特性;没有关于它的 Sails 特定的东西。来自Node.js documentation:

    request.setTimeout(timeout[, callback])

    添加于:v0.5.9

    • timeout <number> 请求前的毫秒数 视为超时。
    • callback <Function> 可选功能 发生超时时调用。与绑定超时事件相同。

    一旦一个套接字被分配给这个请求并被连接 socket.setTimeout() 将被调用。

    因此,如果您想将超时时间增加到 4 分钟,请在 Sails.js 操作中执行 req.setTimeout(4 * 60 * 1000)。

    您也可以考虑使用 Sails 的 built-in file upload capabilities!

    【讨论】:

    • 但是我需要在每个控制器中添加有没有办法在sails.js中全局设置
    • 默认节点服务器超时由server.timeout 设置(参见文档here)。您可以通过 sails.hooks.http.server 访问 Sails 中的原始 HTTP 服务器(如 this answer 中所述)。所以,sails.hooks.http.server=<timeout in milliseconds>。 Google 是您的朋友!
    猜你喜欢
    • 2019-08-20
    • 2017-05-18
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 2013-08-16
    • 2013-03-15
    • 2019-01-31
    相关资源
    最近更新 更多