Mongoose Schema
var UserSchema = new Schema({
name: {
type: String,
unique: true,
required: true
},
password: {
type: String,
required: true
}
});
上面的代码只是为了显示UserSchema只是一个实例。我在下面使用this
时感到困惑。那指的是什么?
UserSchema.pre('save', function (next) {
var user = this;
if (this.isModified('password') || this.isNew) {
bcrypt.genSalt(10, function (err, salt) {
if (err) {
return next(err);
}
bcrypt.hash(user.password, salt, function (err, hash) {
if (err) {
return next(err);
}
user.password = hash;
next();
});
});
} else {
return next();
}
});
答案 0 :(得分:0)
具体做法是:
var user = this;
指:
UserSchema
控制台记录:
var user = this;
console.log(user);
看看周围!
为什么我们甚至需要创建一个实例? - @Nichole A. Miler
它为您提供了创建多个实例的选项。
var UserSchema = new Schema({...});
var AnotherUserSchema = new Schema({...});
答案 1 :(得分:0)
this
关键字是指您要保存的用户文档,在这种情况下,如果已经设置了这些用户文档,则使用名称和密码。
另外,每个mongoose / mongo的好处,例如isNew,isModified,以及模式中的虚拟字段和方法等等。
答案 2 :(得分:0)
我认为这是ECMAScript中最混乱的机制之一。当你说“这个”时,我认为它会造成混乱,因为我们也试图考虑它字面意思并且最常见的一个错误观念是,不知何故,它指的是函数的范围 - 让我在这里说清楚:this
根本没有提到函数的词法范围......
this
,在ECMAScript中,它是基于函数调用条件的“基于上下文”。 this
绑定与声明函数的位置无关,而是与调用函数的方式有关。所以一个好的开始方式是this
不是。
在您的情况下,您希望“保留上下文”,因为稍后将引用它,并且一旦调用其他函数,就会创建激活记录,也称为执行上下文...最终,如果你需要参考前一个,你将不会拥有它。
使用console.log()
进行游戏,看看每次通话中的内容,都可以为您提供线索。
注意: ECMAScript 6对此有一些“改进”:)