Mongoose: ليست دالة ERROR - this.isModified ليست دالة

تم إنشاؤها على ١٨ سبتمبر ٢٠١٦  ·  11تعليقات  ·  مصدر: Automattic/mongoose

عندما أستخدم الكود التالي:

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)  {
});

ال 11 كومينتر

أنت تستخدم عامل تشغيل سهم لرد الاتصال ، والذي يغير نطاق 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. شكرا جزيلا لك!

عظيم شكرا لك

شكرا ، يعمل معي أيضا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات