Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何压缩json以使用`bodyParser.json获得它`_Node.js_Json_Reactjs_Compression - Fatal编程技术网

Node.js 如何压缩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中的请求

我想向我的服务器发送一个压缩的json

我更喜欢在浏览器中压缩数据。()并将其发送到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));
调用函数

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。