zlib.gunzipSync 不在 node.js 中用于 meteorhacks:npm

zlib.gunzipSync is not in node.js used in meteorhacks:npm

我使用 meteorhacks:npm 在 meteor 中导入 npm 模块 Telegram.link。它工作正常但是当我调用一个特定的函数时,我看到这个错误:

W20160218-16:37:38.369(3.5)? (STDERR) /home/omid/Documents/test3/.meteor/local/isopacks/npm-container/npm/node_modules/telegram.link/node_modules/telegram-mt-node/lib/net/encrypted-rpc-channel.js:75
W20160218-16:37:38.370(3.5)? (STDERR)         var buffer = zlib.gunzipSync(packedData);
W20160218-16:37:38.370(3.5)? (STDERR)                           ^
W20160218-16:37:38.377(3.5)? (STDERR) TypeError: Object [object Object] has no method 'gunzipSync'
W20160218-16:37:38.377(3.5)? (STDERR)     at checkIfGzipped (/home/omid/Documents/test3/.meteor/local/isopacks/npm-container/npm/node_modules/telegram.link/node_modules/telegram-mt-node/lib/net/encrypted-rpc-channel.js:75:27)
W20160218-16:37:38.377(3.5)? (STDERR)     at [object Object]._onTimeout (/home/omid/Documents/test3/.meteor/local/isopacks/npm-container/npm/node_modules/telegram.link/node_modules/telegram-mt-node/lib/net/encrypted-rpc-channel.js:67:28)
W20160218-16:37:38.377(3.5)? (STDERR)     at Timer.listOnTimeout [as ontimeout] (timers.js:121:15)

我认为问题出在 meteorhacks:npm(v0.10.* 根据 .node_version 文件)中使用的 NodeJ 版本,并且在该版本中没有 gunzipSync 。我查看了 v5.6.0,里面有一个 gunzipSync。 我将文件 .node_version 中的版本更改为 v5.6.* 并且没有任何变化。 抛出异常的代码是:

var zlib = require('zlib');
function checkIfGzipped(obj) {
    if (typeof obj !== 'boolean' && obj.instanceOf('mtproto.type.Gzip_packed')) {
        var packedData = obj.packed_data;
        logger.info("Gzip packed data [%s]", packedData ? packedData.toString('hex') : null);
        var buffer = zlib.gunzipSync(packedData);
        logger.info("Buffer after gunzip [%s]", buffer.toString('hex'));
        var Type = tl.TypeBuilder.requireTypeFromBuffer(buffer);
        return new Type({buffer: buffer}).deserialize();
    }
    else return obj;
}

有没有办法注入 gunzipSync 函数的功能,以便 checkIfGzipped 函数开始工作?

我终于解决了这个问题! 我发现了一个 code 可以使 zlib 工作,我更改了 telegram.link 包以便使用这个包而不是 nodejs 内置的包:

var zlib = require('./node-zlib.js');