我已经实现了node.js服务器应用程序,该应用程序从客户端(长json字符串)接受发布数据。有没有一种方法可以在浏览器端将发布数据gzip压缩并在node.js中解压缩?
我特别想gzip请求而不是响应。
检查https://jsfiddle.net/gynz82tg/在获得base64编码的请求字符串之后,在nodejs中解压缩是完全相同的。
var jsonStr = JSON.stringify({
name: "JiangYD"
})
$('#origin').text(jsonStr);
var zip = new JSZip();
zip.file("data", jsonStr);
var content = zip.generate();
$('#compressed').text(content);
zip = new JSZip(content, {base64:true});
$('#decompressed').text(zip.file("data").asText());
<script src="https://raw.githubusercontent.com/Stuk/jszip/master/dist/jszip.js"></script>
<div id='origin'></div>
<div id='compressed'></div>
<div id='decompressed'></div>
UPDATE因为jsZip更新了API
https://jsfiddle.net/cvuqr6h4/
async function go(){
const jsonStr = JSON.stringify({
name: "JiangYD"
})
$('#origin').text(jsonStr);
let zip = new JSZip();
zip.file("data", jsonStr);
const content = await zip.generateAsync({type : "base64"});
$('#compressed').text(content);
zip = new JSZip();
await zip.loadAsync(content, {base64:true});
const decoded = await zip.file("data").async('string');
$('#decompressed').text(decoded);
}
go();
您可以尝试以下方法:https://github.com/sapienlab/jsonpack
示例客户代码:
<script src="jsonpack.js" />
<script>
var BIG_JSON = {.....};
var packed = jsonpack.pack(BIG_JSON);
$.post('path_to_server',packed);
</script>
Nodejs示例代码:
var jsonpack = require('jsonpack/main');
app.on('/packed_data',function(req,res){
try{
jsonpack.unpack(req.data);
}catch(e){
//not good packed data.
}
})
这是示例代码,我当然不知道您使用什么框架或库,但是您可以看到如何实现。无论如何都要小心,因为压缩和解压缩数据始终是cpu绑定的繁重任务。如果您有几兆字节的数据,则不想让您的用户通过电话,平板电脑等来执行此任务!