Cryptographer TypeError:第一个参数必须是一个string

所以我想创build一个pincode /密码散列的unit testing。 我之前遇到过这个错误,但是后来我用一个简单的.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命名约定外, variablesiterationskeyLength来自一个常量文件。 所以这也不是问题。

我希望有人能带领我走向正确的方向

编辑:

这是整个getHashPincode

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

pin.toString()没有错。

是什么导致错误是new Buffer(salt, 'hex') ,因为你指定了一个编码( hex ),那么第一个参数( )必须是一个string。 salt.toString()应该做的伎俩