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');
我使用 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');