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

所以我正在做一个Ajax(jQuery)的post,上传相当数量的JSON数据。 发布大量数据时,数据通常会被分成大块。 所以我们必须监听发布的数据请求,并构build完整的上传数据缓冲区。 像这样的东西:

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); }); 

这似乎是工作,如果我上传一个文件的forms:

 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数据(这是dynamic的)。 我正在这样做:

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

那么似乎没有要求'数据'或'结束'的callback。 那么如何上传不同于发布数据的文件呢?

这似乎解决了我的问题:

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

通过XMLHttpRequest (这是jQuery从内部使用的) POST '数据不是stream。 整个项目将被发送到服务器,然后处理程序将触发,内容已经加载( req.body )。 如果你想把它发送出去,那么你将不得不自己实现这个。 例如,通过使用HTML5 FileSystem API读取文件,自己将它们块化,并使用websocket将分块的数据写入服务器。 我在socketio-upload中做了这样的事情,所以你可能想看看。