Node.js 如何压缩json以使用`bodyParser.json获得它`
我想向我的服务器发送一个压缩的json 我更喜欢在浏览器中压缩数据。()并将其发送到bodyParser.json中间件 客户端功能如下所示:Node.js 如何压缩json以使用`bodyParser.json获得它`,node.js,json,reactjs,compression,Node.js,Json,Reactjs,Compression,我想向我的服务器发送一个压缩的json 我更喜欢在浏览器中压缩数据。()并将其发送到bodyParser.json中间件 客户端功能如下所示: export function compressGzip(input) { const stream = new Response(input).body.pipeThrough( new CompressionStream('gzip') ) return new Response(stream) } 我在react.js中的请求
export function compressGzip(input) {
const stream = new Response(input).body.pipeThrough(
new CompressionStream('gzip')
)
return new Response(stream)
}
我在react.js中的请求:
return fetch(url, {
headers: {
'Content-Type':'application/json',
'content-encoding': 'gzip'
},
method: 'POST',
body: bodyContent
}).then(res => res.blob())
node.js:
app.use(
bodyParser.json({
limit: "10mb"
})
);
根据这些数据进行压缩的方法是什么?它有意义吗
提前感谢 我用zlib做过,但没有用GZIP 首先,我有这个客户端功能
function compressBody(body) {
return new Promise( function( resolve, reject ) {
zlib.deflate(body, (err, buffer) => {
if(err){
console.log("Error Zipping");
reject(err);
}
console.log("Zipped");
resolve(buffer);
});
});
}
let compressedBody = await compressBody(JSON.stringify(body));
调用函数
function compressBody(body) {
return new Promise( function( resolve, reject ) {
zlib.deflate(body, (err, buffer) => {
if(err){
console.log("Error Zipping");
reject(err);
}
console.log("Zipped");
resolve(buffer);
});
});
}
let compressedBody = await compressBody(JSON.stringify(body));
然后我可以将这个compressedBody变量分配给WebService调用
var promise = fetch(ServiceUrl, {method: 'POST', headers:headers, body:compressedBody}).then((result) => result.json() );
然后需要更改服务器端代码以接受压缩的正文。我使用了Express并做了以下操作
var BodyParser = require('body-parser');
require('body-parser-zlib')(BodyParser);
var app = express();
// Other code....
app.use(BodyParser.zlib()); // support json encoded bodies
app.use(BodyParser.json({"inflate": true})); // support json encoded bodies
用blob设计,效果完美:) 守则: 客户端:
export function compressGzip(input) {
const stream = new Response(input).body.pipeThrough(
new CompressionStream('gzip')
)
return new Response(stream).blob()
}
const bodyContent = await compressGzip(JSON.stringify({data: data})
return fetch(url, {
headers: {
'Content-Type':'application/json',
'content-encoding': 'gzip'
},
method: 'POST',
body: bodyContent
}).then(res => res.blob())
服务器端-node.js:
app.use(
bodyParser.json({
limit: "10mb"
})
);
谢谢!我不想改变服务器端。对gzip有什么想法吗?从body parser的文档来看,“body的Unicode编码”似乎支持。再次感谢!。我别无选择,只能改变服务器端,否则API将无法处理压缩的有效负载。如果您只是压缩来自客户机的有效负载并调用您的服务,您可能会得到500美元的回报。对不起,从未使用过GZIP。