Node.js:将请求的inputinput到crypto.hash中
我想从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
的输出request
给散列函数。
任何提示?
crypto.createHash()
提供了一个Hash
实例,当前支持两个接口:legacy( update()
和digest()
)和stream。 你不需要做任何特殊的事情来使用其中的任何一个,所以将响应stream式传输到散列stream就像下面这样简单:
var hasher = crypto.createHash('sha1'); hasher.setEncoding('hex'); request(url).pipe(hasher).on('finish', function() { console.log('Hash is', hasher.read()); });
这就是通常的callback方式,但是我不确定你会怎样工作,因为我对发电机和其他方面不够熟悉。