هناك مشكلة في ربط الحفظ المسبق حيث يجب أن تعطيني كلمة "هذا" المستند الذي يتم حفظه ولكنه يعطي غير محدد بدلاً من ذلك.
import mongo from 'mongoose'
import crypt from 'bcryptjs'
const User = new mongo.Schema({
username: {type: String, unique: true, required: true},
password: {type: String, select: false, required: true}
// token: {type: String}
})
//
User.pre('save', (next) => {
console.log(this);
if (this.isModified('password') || this.isNew) {
crypt.genSalt(10, (err, salt) => {
if (err) {
next(err)
} else {
crypt.hash(user.password, salt, (err, hash) => {
if (err) {
next(err)
} else {
user.password = hash
next()
}
})
}
})
} else {
next()
}
})
export default mongo.model('User', User)
ماذا يمكن أن يكون الخطأ؟
ملاحظة: يحفظ بشكل طبيعي عند عدم استخدام الخطاف المسبق.
يربط سهم الدهون في ES6 this
بالنطاق المعجمي ، وهي مجرد طريقة this
داخل دالة السهم هو نفسه خارج وظيفة السهم. استخدم User.pre('save', function(next) {});
بدلاً من ذلك.
هل هناك طريقة للحصول على الكائن باستخدام وظيفة السهم ؟، سأستخدم "الوظيفة" ولكن يتم فرض دليل نمط في المشروع.
لسوء الحظ ، لا تعتمد الخطافات المسبقة بشكل صريح على تمرير المستند عبر this
بدلاً من استخدامه كمعامل. لن تعمل سهام الدهون مع هذا النموذج.
التعليق الأكثر فائدة
يربط سهم الدهون في ES6
this
بالنطاق المعجمي ، وهي مجرد طريقةthis
داخل دالة السهم هو نفسه خارج وظيفة السهم. استخدمUser.pre('save', function(next) {});
بدلاً من ذلك.