使用node + express解压缩POST主体

ale*_*x88 8 zlib node.js express

我有一个简单的节点应用程序,应该从客户端编写指标.客户端使用python的zlib模块压缩json格式的度量标准,我正在尝试添加一个中间件,以便在快速发生bodyParse之前解压缩请求帖子.

我的中间件只是默认情况下由express提供的中间件:

app.configure(function(){
    app.set('port', process.env.PORT || 3000);
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.use(express.favicon());
    app.use(express.logger('dev'));
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.cookieParser('your secret here'));
    app.use(express.session());
    app.use(app.router);
    app.use(require('less-middleware')({ src: __dirname + '/public' }));
    app.use(express.static(path.join(__dirname, 'public')));
});
Run Code Online (Sandbox Code Playgroud)

我试图添加一个简单的中间件来获取数据然后解压缩它:

app.use(function(req, res, next) {
    var data = '';
    req.addListener("data", function(chunk) {
        data += chunk;
    });

    req.addListener("end", function() {
        zlib.inflate(data, function(err, buffer) {
            if (!err) {
                req.body = buffer;
                next();
            } else {
                next(err);
            }
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

问题是zlib.inflate我收到此错误:

Error: incorrect header check
Run Code Online (Sandbox Code Playgroud)

数据已经使用python的zlib模块进行了压缩:

zlib.compress(jsonString)
Run Code Online (Sandbox Code Playgroud)

但似乎没有解压缩,膨胀,枪口工作.

ale*_*x88 12

我自己找到了解决方案,问题在于这段代码:

req.addListener("data", function(chunk) {
    data += chunk;
});
Run Code Online (Sandbox Code Playgroud)

似乎连接请求数据不正确,所以我把我的中间件切换到这个:

app.use(function(req, res, next) {
    var data = [];
    req.addListener("data", function(chunk) {
        data.push(new Buffer(chunk));
    });
    req.addListener("end", function() {
        buffer = Buffer.concat(data);
        zlib.inflate(buffer, function(err, result) {
            if (!err) {
                req.body = result.toString();
                next();
            } else {
                next(err);
            }
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

连接缓冲区工作得很好,我现在能够解压缩请求体.