Javascript Cryptographer TypeError:第一个参数必须是字符串

Javascript Cryptographer TypeError:第一个参数必须是字符串,javascript,node.js,ecmascript-6,es6-promise,Javascript,Node.js,Ecmascript 6,Es6 Promise,因此,我试图为一些pincode/密码散列创建一个单元测试。我之前也遇到过这个错误,但后来我用一个简单的.toString()解决了它,但现在这似乎不起作用 这是我的一些与方法相关的代码: pin.model.spec.js: let pin = Math.floor(1000 + Math.random() * 9000); let hash = await Pincode.getHashedPincode(pin.toString(), salt); crypto.js: function

因此,我试图为一些pincode/密码散列创建一个单元测试。我之前也遇到过这个错误,但后来我用一个简单的
.toString()
解决了它,但现在这似乎不起作用

这是我的一些与方法相关的代码:

pin.model.spec.js:

let pin = Math.floor(1000 + Math.random() * 9000);
let hash = await Pincode.getHashedPincode(pin.toString(), salt);
crypto.js:

function getPasswordHash(password, salt) {
  return new Promise((resolve, reject) => {
    crypto.pbkdf2(password, new Buffer(salt, 'hex'), iterations, keyLength, 'SHA1', (err, result) => {
      if (err) {
        return reject(err);
      }
      return resolve(result.toString('hex'));
    });
  });
}
不要担心不一致的方法名,在它们之间有一个名为
getHashedPincode
的方法,它除了调用
getPasswordHash
之外,什么都不做,只是为了命名约定。变量
iterations
keyLength
来自常量文件。所以这也不是问题所在

我希望有人能把我引向正确的方向

编辑:

这是整个
getHashPincode

Pincode.getHashedPincode = async (pincode, salt) => {
  return cryptographer.getPasswordHash(pincode, salt);
};

pin.toString()
没有问题

导致错误的原因是新缓冲区(salt,'hex'),因为您指定了编码(hex),所以第一个参数(salt)必须是字符串。
salt.toString()
应该可以做到这一点

pin.toString()没有什么问题

导致错误的原因是新缓冲区(salt,'hex'),因为您指定了编码(hex),所以第一个参数(salt)必须是字符串。
salt.toString()
应该可以做到这一点

你能给我们看一下
getHashedPincode
?我编辑了你给我们看的帖子
getHashedPincode
?我编辑了帖子你是我的英雄,我完全错过了。但它似乎确实有效!你是我的英雄,我完全错过了。但它似乎确实有效!