我正在使用fetch.js(
https://github.com/github/fetch)向后端发送一个相对较大的json对象. json很大,因为它包含一个SVG图像字符串.
我不清楚fetch.js是否默认使用gzip压缩,或者我是否需要手动压缩和添加标头.任何帮助,将不胜感激.
返回新的承诺((resolve,reject)=> {
fetch(api_base“/ api / save-photo”,{
方法:’POST’,
模式:’cors’,
标题:{
‘Content-Type’:’application / json’
},
body:JSON.stringify(payload)
})
.then((response)=> {
if(response.status === 404){
抛出新错误(‘404(Not Found)’);
} else {
return response.json().then((json)=> {
console.log(‘保存海报回复:’,json);
返回json;
});
}
})
最佳答案 我假设用你的线
body: JSON.stringify(payload)
有效载荷未压缩.
我还希望能够压缩/压缩有效负载主体,我还需要一个异步方法来适应我的其余代码.我正在努力的一点是找到一种方法来使用没有回调的zlib.
为实现这一目标,我做了以下……
在一个单独的帮助库中,我导入zib …
import zlib from 'zlib'
我创建了以下功能….
async function asyncCompressBody(body) {
const compressedData = await compressBody(body);
console.log("Data Compressed");
return compressedData;
}
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);
});
});
}
compressBody函数是围绕zlib.deflate的一个承诺. asyncCompressBody函数是一个异步函数,允许调用函数等待.
在调用函数中,我用它作为……
let compressedBody = await asyncCompressBody(jsonContent);
let headers = new Headers();
headers.append("Content-Type","application/json");
headers.append("Content-Encoding","zlib");
const response = await fetch(url,
{method: 'POST',
headers:headers,
body:compressedBody});