Node.js 无法重新分配对象键值-我的语法是否不正确?

Node.js 无法重新分配对象键值-我的语法是否不正确?,node.js,object,syntax,promise,bcrypt,Node.js,Object,Syntax,Promise,Bcrypt,我正在尝试使用bcrypt和nodejs/express实现一个注册表 如下所示,我尝试设置User.password=hash但是由于某种原因,当将对象传递到postgres时,输入了未删除的密码 下面的代码显示了一个小的更改。我改了原稿 User.create({name,email,password}) 到 User.create({name,email,password:hash}) 这在传递散列密码时有效,但对我来说没有意义。。。这不是必要的吗?我错过了什么 如果有人能帮助我们了解情况

我正在尝试使用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
是(我相信)一个猫鼬模型,类似于ECMAScript 6中的一个类。直接在类本身上指定属性(这些是静态属性)不会更改创建的项。您要做的是在
User
变量上创建一个新属性

因此,要使用速记属性表示法语法,只需将变量
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
中,因此无法使用快捷方式,尽管
name
email
保持不变

要使用快捷方式,必须将哈希存储在名为
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
    })

仅供参考,我试着用您提到的
password
替换
hash
,但似乎没有
hash
被传递到函数中,它没有任何设置
User.password=hash使用。我得到的错误是
ReferenceError:hash没有定义,您刚刚将变量重命名为
password
,因此您必须执行
User.password=password
请注意,如果您已经在发布的代码上方定义了名为
password
的变量,则重复使用相同的变量名是非常糟糕的做法。最好改为叫它
hash
,然后做
User.create({name,email,password:hash})
Ah,刚刚更新,效果也不错!谢谢感谢您提供的提示,不要再使用相同的变量名。尽管有重复,这是如何工作的?这是固定的!你是对的,我试着改编一段猫鼬代码来续集。如果您不介意我深入挖掘的话,这确实会引发一个问题:如何不将新密码变量与用户对象中以前存在的密码密钥混淆?如果不更改代码,将传入以前的密码值。谢谢附言:我想投你一票,但我似乎没有足够的代表。我也不知道如何回答别人的问题。抱歉。不必担心@roca-如果我的答案解决了您的问题,请点击勾号接受。你也可以从中获得声誉!