我正在尝试将getRandomValues()函数用于我正在练习的加密REST API。我正在使用Node作为服务器。因此,我知道我没有一个窗口对象,该窗口对象也包含通常包含“ getRandomValues()”函数的加密对象。
每当我测试它时,都会出现此错误:TypeError: expected Uint8Array
此错误在此函数的第三行发生:
getrand: function (places) {
var array = new Uint32Array(20);
getRandomValues(array);
var ret = array[0];
for (var i = 1; i < array.size; i++) {
ret *= array[i];
}
ret = this.shiftnum(ret, 10);
return ret;
},
另外,在上面我已经用
var getRandomValues = require('get-random-values);
导入了npm包我查看了该软件包的文档,并看到了一些stackoverflow答案,其中有人提供了使用该软件包的示例。直接来自package page的代码片段示例在此处:
var getRandomValues = require('get-random-values');
var array = new Uint32Array(10);
getRandomValues(array);
// => [
// => 183,
// => 76,
// => 18,
// => 177,
// => 73,
// => 9,
// => 50,
// => 248,
// => 216,
// => 104
// => ]
这也是我在示例中看到的相同格式。我还尝试制作一个非常简单的测试函数来调试此问题,如下所示:
test: function() {
var array = new Uint32Array(10);
getRandomValues(array);
console.log(array[0]);
return;
}
完全相同的问题发生在第三行。另外,我尝试将
var array = new Uint32Array(10);
行更改为var array = new Uint8Array(10);
只是为了消除错误,但是错误仍然完全相同。基本上,我试图弄清楚为什么这行不通。我已经为此困扰了几天,无法弄清楚我在做什么错。
先感谢您。
最佳答案
我发现了自己的错误:
getRandomValues(buf)
用密码随机填充基于整数的TypedArray buf
数字。检查并使用以下第一个:
window.crypto.getRandomValues
window.msCrypto.getRandomValues
Node.js加密
如果以上都不可用,则会引发错误。
如果buf.length> 65536(即使Node.js,则抛出QuotaExceededError)
没有该限制的加密货币)。
如果使用Node.js加密,则buf必须为Uint8Array,否则为
TypeError将被抛出。
显然我正在使用Node.js加密,因此我需要一个Uint8Array。我不知道之前发生了什么,但是这次更改了代码之后,它可以正常工作了。
关于javascript - Node 中的getRandomValues():“预期的Uint8Array”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37636694/