如何为node.js服务器gzip http请求发布(客户端)数据

问题描述 投票:1回答:2

我已经实现了node.js服务器应用程序,该应用程序从客户端(长json字符串)接受发布数据。有没有一种方法可以在浏览器端将发布数据gzip压缩并在node.js中解压缩?

我特别想gzip请求而不是响应。

node.js http gzip
2个回答
1
投票

检查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();

0
投票

您可以尝试以下方法: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绑定的繁重任务。如果您有几兆字节的数据,则不想让您的用户通过电话,平板电脑等来执行此任务!

© www.soinside.com 2019 - 2024. All rights reserved.