无法重新分配对象键值 - 我的语法不正确吗?

Cannot reassign object key value - is my syntax incorrect?

我正在尝试使用 bcrypt 和 nodejs/express 实现注册表单。

正如您将在下面看到的,我尝试设置 User.password = hash; 但由于某种原因,当将对象传递到 postgres 时,正在输入未散列的密码。

下面的代码显示了一个小的变化。我改了原来的

User.create({name, email, password})

User.create({name, email, password: hash})

这在传递散列密码时有效,但对我来说没有意义...这不是必需的吗?我错过了什么?

如果能帮助理解正在发生的事情,我们将不胜感激。谢谢!

                        bcrypt.hash(newUser.password, salt, (err, hash) => {
                            if(err) throw err;
                            // Set password to hashed
                            User.password = hash;
                            console.log(hash);
                            // Save user
                            User.create({
                                name,
                                email,
                                password: hash
                            })
                                .then(user => {
                                    res.redirect('/users/login')
                                })
                                .catch(err => console.log(err));
                    }))

因为 User 是(我相信)一个 Mongoose 模型,类似于 ECMAScript 6 中的 class。直接在 class 本身上分配属性(这些是 static 属性) 不改变创建的项目。您正在做的是在 User 变量上创建一个新的 属性。

因此,要使用 shorthand 属性 符号语法,您需要做的就是使变量 password 等于 hash:

bcrypt.hash(newUser.password, salt, (err, hash) => {
  let password = hash;
  User.create(name, email, password)
    .then(user => res.redirect("/users/login"))
    .catch(err => console.log(err));

语法 User.create({name, email, password}) 只是一个快捷方式:

User.create({
    name: name,
    email: email,
    password: password
})

由于您的密码哈希存储在变量 hash 而不是 password 中,您不能使用它的快捷方式,尽管 nameemail 没有变化。

为了使用快捷方式,您必须将哈希存储在名为 password:

的变量中
bcrypt.hash(newUser.password, salt, (err, password) => {
                                           // ^^^ this will make it work
    if(err) throw err;
    // Set password to hashed
    User.password = password;
    console.log(password);
    // Save user
    User.create({
        name,
        email,
        password
    })