我正在尝试将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/

10-11 03:05