无法重新分配对象键值 - 我的语法不正确吗?
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
中,您不能使用它的快捷方式,尽管 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
})
我正在尝试使用 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
中,您不能使用它的快捷方式,尽管 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
})