Node.js 无法重新分配对象键值-我的语法是否不正确?
我正在尝试使用bcrypt和nodejs/express实现一个注册表 如下所示,我尝试设置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}) 这在传递散列密码时有效,但对我来说没有意义。。。这不是必要的吗?我错过了什么 如果有人能帮助我们了解情况
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-如果我的答案解决了您的问题,请点击勾号接受。你也可以从中获得声誉!