为了账号安全,请及时绑定邮箱和手机立即绑定

为什么使用简单的哈希函数会出现非法参数错误?

为什么使用简单的哈希函数会出现非法参数错误?

HUWWW 2023-08-24 10:02:22
这是我的代码const bcrypt = require('bcryptjs');const salt = bcrypt.genSalt(11);const user = {    first: "Donald",    last: "Trump",    password : bcrypt.hash(this.password, salt),    greetUser(password) {      console.log(`Hi, ${this.first} ${this.last} ${this.password}`);    },  };    let password = 'secondhand01';  user.greetUser(password);我跑node --trace-warnings index.jsHi, Donald Trump [object Promise](node:15222) UnhandledPromiseRejectionWarning: Error: Illegal arguments: undefined, object我期望的是散列密码。为什么终端指向非法参数?
查看完整描述

1 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

在对象字面量中,password : bcrypt.hash(this.password, salt) 调用 bcrypt.hash并将其返回值分配给password属性。在您显示的代码中,this 不是指正在创建的对象,而是指同一件事this指的是创建对象文字的位置(模块的顶层)。由于它没有属性password,因此您将传递undefined给该函数。


bcrypt.hash还返回一个承诺,正如您从未处理的承诺拒绝之前获得的输出中看到的那样。


您的user对象正在填充硬编码值,因此您可能打算执行以下操作:


const bcrypt = require('bcryptjs');

const salt = bcrypt.genSalt(11);


bcrypt.hash("secondhand01", salt) // <=== Encrypt the password

.then(hashedPassword => {

    // You have it now, you can build and use the object

    const user = {

        first: "Donald",

        last: "Trump",

        password : hashedPassword,

        greetUser() { // Note I removed the parameter you weren't using here

          console.log(`Hi, ${this.first} ${this.last} ${this.password}`);

        },

    };

      

    user.greetUser(); // Note I removed the unused argument here

})

.catch(error => {

    // Handle/report the error...

});


查看完整回答
反对 回复 2023-08-24
  • 1 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信