如何在nodejs / express中发布大量的json数据(不是文件)

时间:2011-12-05 09:56:02

标签: ajax node.js express

所以我正在做一个上传大量json数据的ajax(jquery)帖子。发布大数据时,数据通常会分成块。所以我们必须监听后期数据请求并构建上传数据的完整缓冲区。像这样:

    req.on('data', function(chunk) {
        console.log("upload on data "+ chunk.length);
        chunks.push(chunk);
        total+= chunk.length;
    });
    req.on('error', function(e) {
            console.log('Got Error ' + e.message);
    });
    req.on('end', function() {
        var buf = new Buffer(total)
            cur = 0;
        for (var i = 0, l = chunks.length; i < l; i++) {
            chunks[i].copy(buf, cur, 0);
            cur += chunks[i].length;
        }

        var level = 1;
        var path = "level"+level+".json";
        writeToFile(buf,path);
        res.send("Update successfull as level "+level);
    });

如果我上传文件格式为

,这似乎有效
function display_form(req, res) {
    res.sendHeader(200, {"Content-Type": "text/html"});
    res.write(
        '<form action="/upload" method="post" enctype="multipart/form-data">'+
        '<input type="file" name="upload-file">'+
        '<input type="submit" value="Upload">'+
        '</form>'
    );
    res.close();
}

但我需要上传json数据(这是动态的)。我是这样做的:

           $.ajax({
                type: "POST",
                url: "/upload",
                data: {"data": JSON.stringify(gamePack)},
                success: cb,
            });

然后似乎没有对req'data'或'end'的回调。那么上传文件与发布数据有何不同?

2 个答案:

答案 0 :(得分:1)

这似乎解决了我的问题:

$.ajax({
        type: "POST",
        dataType: 'json',
        url: "/upload",
        contentType:"application/jsonrequest",
        data: JSON.stringify(gamePack),
        success: cb,
});

答案 1 :(得分:0)

POST通过XMLHttpRequest(jQuery在内部使用的数据)提供的数据不是流媒体。整个项目将发布到服务器,然后处理程序将触发,内容已加载(在req.body中)。如果你想将它发送到chunked,那么你必须自己实现它。例如,通过使用HTML5 FileSystem API来读取文件,自己对其进行分块,并使用websocket将分块数据写入服务器。我在socketio-upload中做过类似的事情,所以你可能想看一下。