POST请求失败,没有错误消息(Parse.com / ExpressJS)

时间:2014-12-08 10:37:40

标签: javascript node.js express parse-platform

我遇到一个问题,我发出的POST请求失败,错误代码为500,并且我的服务器端错误日志中没有打印任何内容。这几乎就像云方法不存在一样。

但奇怪的是,相同的POST请求对较小的文件执行得很好。当文件达到大约1.4 MB时,它开始失败。我已经尝试过改变express.bodyParser的限制参数,就像这样“app.use(express.bodyParser({limit:10000000}));”,但是没有区别。

以下是一些代码:

function uploadFile(pageState)
{
    var reader = new FileReader();
    reader.onload = function()
    {
        var data = reader.result;

        var byteArrayObj = new Uint8Array(data);
        var byteArray = new Array(byteArrayObj.length);
        for(i=0; i<byteArray.length; i++) {
            byteArray[i] = byteArrayObj[i];
        }

        var json = { data: byteArray };
        var jsonString = JSON.stringify(json);

        var xmlhttp = new XMLHttpRequest();
        xmlhttp.open("POST", "/assetUploader/"+pageState.assetIdentifier+"/"+pageState.fileName+"/"+pageState.isAssetBundle+"/"+pageState.uploadToProduction, true);
        xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
        xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");

        xmlhttp.onload = function(evt) {
            ...
        };

        xmlhttp.send(jsonString);
    };
    reader.readAsArrayBuffer( pageState.fileRef );
}

在云端:

app.post('/assetUploader/:fileIdentifier/:fileName/:isAssetBundle/:useProd', function(req, res)
{
    console.log("assetUpload Post");
    var fileId = req.params.fileIdentifier;
    var fileName = req.params.fileName;
    var assetBundle = req.params.isAssetBundle  == "true";
    var bytes = req.body.data;
    var useProd = req.params.useProd == "true";

    createParseFile(fileName, bytes, useProd).then( function(response) {
        return currentVersionForAsset(fileId, useProd).then(function(versionNumber) {
            return {
                "fileIdentifier": fileId,
                "file": {
                        "name": response.data.name,
                    "__type": "File"
                    },
                "isAssetBundle": assetBundle,
                "fileVersion": versionNumber+1
            };
        });
    }).then(function(json) {
        return createParseObject("DownloadableAsset", json, useProd);
    }).then( function() {
            res.send(200);
        }, function(error) {
        res.send(400, error.message);
    });
});

非常感谢任何帮助或建议。谢谢你的时间!

1 个答案:

答案 0 :(得分:1)

我建议使用res.setTimeout和非常多的milisecs。也许你的回复只是超时了,根据我的经验,节点在发生时不会抛出错误。