Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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
Javascript Node.JS http服务器,压缩-发送变量作为响应_Javascript_Node.js_Zlib_Http Compression - Fatal编程技术网

Javascript Node.JS http服务器,压缩-发送变量作为响应

Javascript Node.JS http服务器,压缩-发送变量作为响应,javascript,node.js,zlib,http-compression,Javascript,Node.js,Zlib,Http Compression,对不起,这个模糊的问题。。但我不太确定问题出在哪里。 我有一个节点http服务器,用于向web应用程序提供JSON数据。它工作得很好,但是我的JSON字符串开始变大(10-12MB),所以我想用zlib添加压缩 JSON数据在一个字符串变量中,我想压缩并写入响应对象。。。但是返回到客户端的结果似乎总是有完美的标题,而没有内容。以下是我的deliverResponse函数: var deliverResult = function (data, response, callback, accept

对不起,这个模糊的问题。。但我不太确定问题出在哪里。 我有一个节点http服务器,用于向web应用程序提供JSON数据。它工作得很好,但是我的JSON字符串开始变大(10-12MB),所以我想用zlib添加压缩

JSON数据在一个字符串变量中,我想压缩并写入响应对象。。。但是返回到客户端的结果似乎总是有完美的标题,而没有内容。以下是我的deliverResponse函数:

var deliverResult = function (data, response, callback, acceptEncoding){
    var payload = callback + '(' + JSON.stringify(data) + ');';

    if (acceptEncoding.match(/\bdeflate\b/)) {
        response.writeHead(200, { 'Content-Encoding': 'deflate', 'Content-Type': 'text/javascript; charset=UTF-8' });
        zlib.deflate(payload, function(err, result){
            if(!err){
                //console.log(result.toString('utf8')); // I have data on the console here
                response.write(result.toString('utf8')); // No data sent here
           }
        });
    } else if (acceptEncoding.match(/\bgzip\b/)) {
        response.writeHead(200, { 'Content-Encoding': 'gzip', 'Content-Type': 'text/javascript; charset=UTF-8' });
        zlib.gzip(payload, function(err, result){
           if(!err){
                response.write(result.toString('utf8'));
           }
        });
    } else {
        writelog('INFO', 'Returning data without compression\n');
        response.writeHead(200, { 'Content-Type': 'text/javascript; charset=UTF-8' });
        response.write(payload);
    }

    response.end();
}
带有zlib的http服务器示例使用streams和pipe函数,但我不是在应用程序中从数据库生成JSON数据时发送文件,所以我是基于便利方法示例。到目前为止,我知道response对象是好的,结果是。toString('utf8')按预期输出gobeldy gook。如果我不向服务器发送acccept编码头,它会完美地发送纯文本,所以它必须是压缩函数

有人知道这件事吗?我很确定这是因为我对流、管道、缓冲区和zlib对象缺乏了解,这可能只是一个语法问题,所以希望了解这一切的人能帮我解决:)

干杯

解决了


愚蠢的问题。。正在异步函数中调用response.write,因此它在response.write之前执行write.end(),并发送空响应。。。将回调中的response.write替换为response.end,效果非常好:)

我假设JSON是供下载的,否则可能会阻塞浏览器:)不,它是用于实时映射应用程序的位置数据。大多数浏览器都没有问题。