如何压缩 json 以使用 `bodyParser.json` 获取它
How to compress json to get it with `bodyParser.json`
我想向我的服务器发送一个压缩的 json。
我更喜欢在浏览器中压缩数据。(explainer) 并将其传输到 bodyParser.json 中间件。
客户端函数是这样的:
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));
然后我可以将此 compressedBody 变量分配给 webervice 调用...
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"
})
);
我想向我的服务器发送一个压缩的 json。
我更喜欢在浏览器中压缩数据。(explainer) 并将其传输到 bodyParser.json 中间件。
客户端函数是这样的:
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));
然后我可以将此 compressedBody 变量分配给 webervice 调用...
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"
})
);