عندما أستخدم الكود التالي:
userSchema.pre('save', (done) => {
if(this.isModified('password')) {
bcrypt.hash(this.password, null, null, (err, hash) => {
if(err) return next(err);
this.password = hash;
this.updated_at = new Date().toISOString();
done();
});
} else {
return done();
}
});
أتلقى الخطأ التالي:
TypeError: this.isModified is not a function
at model.userSchema.pre (C:\code\project\core\models\user.js:26:11)
at _next (C:\code\project\node_modules\hooks-fixed\hooks.js:62:30)
at fnWrapper (C:\code\project\node_modules\hooks-fixed\hooks.js:186:8)
at model.Object.defineProperty.value.fn (C:\code\project\node_modules\mongoose\lib\schema.js:221:11)
at _next (C:\code\project\node_modules\hooks-fixed\hooks.js:62:30)
at fnWrapper (C:\code\project\node_modules\hooks-fixed\hooks.js:186:8)
at C:\code\project\node_modules\mongoose\lib\schema.js:196:17
at C:\code\project\node_modules\kareem\index.js:127:16
at _combinedTickCallback (internal/process/next_tick.js:67:7)
at process._tickCallback (internal/process/next_tick.js:98:9)
مشكلة:
this
ليس مستندًا أو استعلامًا أو مخططًا. قيمتها {}
كيف يمكنني حل ذلك؟
أنت تستخدم عامل تشغيل سهم لرد الاتصال ، والذي يغير نطاق this
. إذا قمت بتحديد رد اتصال عادي ، فيجب أن تكون بخير ، على سبيل المثال:
userSchema.pre('save', function(done) {
});
موافق. شكرا. إنها تعمل.
إصلاح ملف eslintrc الخاص بك
في الثلاثاء ، 29 نوفمبر 2016 ، الساعة 5:16 صباحًا ، Nick Rameau [email protected]
كتب:
هل هناك طريقة للقيام بذلك باستخدام وظائف السهم؟ أنا أستخدم ES6 و
يشكو eslintrc من عمليات الاسترجاعات العادية.-
أنت تتلقى هذا لأنك مشترك في هذا الموضوع.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/Automattic/mongoose/issues/4537#issuecomment-263567210 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ABi5KbZG27HnF2sX2RwDIhTp4Rz1lIG_ks5rDCW1gaJpZM4J_8-c
.
كان لي هذه المسألة أيضا. شكرا للمساعدةVictorGerritsenQLVR!
هل هناك طريقة لتغيير الكود ليلائم عامل تشغيل السهم ، بدلاً من استخدام function(next)
؟
@ domarp-j سؤال جيد. فكرت في الأمر وحاولت اكتشافه ولكن لم أتمكن من التوصل إلى أي شيء أسهل من مجرد التبديل إلى وظيفة رد الاتصال العادية. ربما قام شخص آخر بذلك. سأراقب هذه المسألة.
لا توجد طريقة للقيام بذلك ، فالأسهم السمينة تستخدم نطاقًا معجميًا للسياق ، ولا توجد طريقة للتغلب عليها.
كان لديه نفس المشكلة ، شكرا للمساعدة
مرحبًا ، كنت عالقًا في نفس المشكلة مع وظيفة السهم es6. شكرا جزيلا لك!
عظيم شكرا لك
شكرا ، يعمل معي أيضا.
التعليق الأكثر فائدة
أنت تستخدم عامل تشغيل سهم لرد الاتصال ، والذي يغير نطاق
this
. إذا قمت بتحديد رد اتصال عادي ، فيجب أن تكون بخير ، على سبيل المثال: