节点js - 如何将请求发送到小块数据(错误:请求实体太大)

时间:2017-05-16 15:05:31

标签: javascript node.js ajax express request

每次我试图通过网络向我的节点js server发送一个巨大的Json对象(包含图像base64)。我得到这个

  

错误:请求实体太大

有这样的解决方案link stackoverflow问题 )建议增加节点js服务器的限制。我正在寻找客户端解决方案。有没有办法分解发送的数据并让服务器等待接收所有数据包然后处理? (承诺??)

假设,如果我的文件是20mb,即使我的限制设置为5mb,我也可以发送它,它只需要更多时间。可能吗? 你能把我带到正确的轨道吗?

我在后端使用快递

这里有一些代码可供参考:

    //AJAX CALL
    var promise = $.Deferred();
    $.ajax('/module/report/ddl',{
        data: {
            widget: JSON.stringify(widget), <--- large, very large
            filename: filename,
            username: username,
            reportname: reportName
        },
        type: 'POST',
        success: function(result){
            //Do something
            promise.resolve(result);
        },
        error :function(err) {
            /* Act on the event */
            promise.reject(err);
        }
    });
    return promise;
}

这是我的服务器端

   router.route('/ddl').post(ddlReport));
   function ddlReport(req, res){
     var filename = req.body.filename;
     var widgets = req.body.widget; <--- Once again large
     var username = req.body.username;


ctrl.ddlProcess(widgets,filename,title,username,function(err, result){
    if(err){
        res.status(422).send(err);
    }else {
        res.send(result);
    }
});

}

如果您需要更多信息,请告诉我们!我试图找到一个最好的解决方案,即使它不是我建议的那个!

感谢您的时间!祝你有美好的一天!

1 个答案:

答案 0 :(得分:0)

你有没有尝试将你的大型json打成小块并单独发送?只需添加一些额外的信息,例如{packet:1,total:20,data:...(一小段大数据)} 然后通过ajax或逐个发送它们。在节点服务器端收集所有这20个部分。另外,你可以有一些校验和。