.then(() => {
console.log('success');
})
.catch(err => {
console.error(err);
});
// 解压缩是反响过程,接口都统一为 uncompress
compressing.gzip.uncompress('nodejs-compressing-demo/lib/urllib.js.gz', 'nodejs-compressing-demo/lib/urllib.js2')
.then(() => {
console.log('success');
})
.catch(err => {
console.error(err);
});
结合 async/await 的编程模型,代码写起来就是一个普通的异步 io 操作。
const compressing = require('compressing');async function main() {
try {
await compressing.gzip.compressFile('nodejs-compressing-demo/lib/urllib.js',
'nodejs-compressing-demo/lib/urllib.js.gz');
console.log('success');
} catch (err) {
console.error(err);
}
// 解压缩
try {
await compressing.gzip.uncompress('nodejs-compressing-demo/lib/urllib.js.gz',
'nodejs-compressing-demo/lib/urllib.js2');
console.log('success');
} catch (err) {
console.error(err);
}
}
main();
Stream 接口
需要特别注意的是,使用 Stream 模式编程,需要处理每个 stream 的 error 事件,并且要手动销毁所有 stream 。
fs.createReadStream('nodejs-compressing-demo/lib/urllib.js')
.on('error', handleError)
.pipe(new compressing.gzip.FileStream()) // It's a transform stream
.on('error', handleError)
.pipe(fs.createWriteStream('nodejs-compressing-demo/lib/urllib.js.gz2'))
.on('error', handleError);// 解压缩,就是 pipe 的方向倒转过来
fs.createReadStream('nodejs-compressing-demo/lib/urllib.js.gz2')
.on('error', handleError)
.pipe(new compressing.gzip.UncompressStream()) // It's a transform stream
.on('error', handleError)
.pipe(fs.createWriteStream('nodejs-compressing-demo/lib/urllib.js3'))
.on('error', handleError);
根据官方的Backpressuring in Streams 推荐,我们应该使用 pump 模块来配合 Stream 模式编程,由 pump 来完成这些 Stream 的清理工作。
const pump = require('pump');const source = fs.createReadStream('nodejs-compressing-demo/lib/urllib.js');
const target = fs.createWriteStream('nodejs-compressing-demo/lib/urllib.js.gz2');
pump(source, new compressing.gzip.FileStream(), target, err => {
if (err) {
console.error(err);
} else {
console.log('success');
}
});
// 解压缩
pump(fs.createReadStream('nodejs-compressing-demo/lib/urllib.js.gz2'),
new compressing.gzip.FileStream(),
fs.createWriteStream('nodejs-compressing-demo/lib/urllib.js3'),
err => {
if (err) {
console.error(err);
} else {
console.log('success');
}
});









