我想从URL计算资源(例如PDF)的哈希值。为此,我写了
const computeHash = co.wrap(function* main(url) {
const response = yield promisify(request)(url);
// assume response.status === 200
const buf = new Uint8Array(response.arrayBuffer);
const hash = crypto.createHash('sha1');
hash.update(buf, 'binary');
return hash.digest('hex');
});
要使用的
const hash = yield computeHash('http://arxiv.org/pdf/1001.1234v3.pdf');
我喜欢什么代码:
yield
。距离async
/仅一步之遥await
。我不喜欢的东西:
request
完成和响应主体作为一个整体管道输送到hash
功能。我宁愿将输出通过管道request
传递给哈希函数。有什么提示吗?
crypto.createHash()
提供一个Hash
实例,该实例当前支持两个接口:旧版(update()
和digest()
)和流式传输。您不必做任何特别的事情就可以使用任何一种,因此将响应流传输到哈希流就很简单:
var hasher = crypto.createHash('sha1');
hasher.setEncoding('hex');
request(url).pipe(hasher).on('finish', function() {
console.log('Hash is', hasher.read());
});
这就是使用普通回调进行处理的方式,但是yield
由于我对生成器等的熟悉程度不足,因此我不确定您将如何处理它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句