2014-04-15 1 views
0

다음을 사용하여 새 문서를 mongodb 데이터베이스에 저장할 수 있습니다. 이 정의되지 않은 메소드와 콜백 내 멤버

User.prototype.save = function (fn) { 
    var user = new userModel({ 
    user: this.user, 
    pass: this.pass 
    }); 
    console.log('user: ' +user); 

    this.hashPassword (user.pass, function (err, salt, hash) { 
    if (err) return fn (err); 
    this.pass = hash; 
    user.salt = salt; 
    user.pass = hash; 
    user.save (function (err, product, numberAffected) { 
     if (err) return fn (err); 
     return fn(undefined); 
    }); 
    }); 
}; 

는 지금은 사용자가 이미

User.prototype.save = function (fn) { 
    // See if the username exists 
    userModel.findOne ({ 'user': this.user }, function (err, user) { 
    if (err) return fn (err); 
    if (!user) { 
     user = new userModel({ 
     user: this.user, 
     pass: this.pass 
     }); 
     console.log('user: ' +user); 

     this.hashPassword (user.pass, function (err, salt, hash) { 
     if (err) return fn (err); 
     this.pass = hash; 
     user.salt = salt; 
     user.pass = hash; 
     user.save (function (err, product, numberAffected) { 
      if (err) return fn (err); 
      return fn(undefined); 
     }); 
     }); 
    } else { 
     // TODO: update all the user fields 
     console.log ('user already exists'); 
    } 
    }); 
} 

this.hashPassword가 더 이상 TypeError: Object #<Promise> has no method 'hashPassword'을 발견하고 사용자의 필드는 현재 정의되지 않습니다 저장하지 전에 존재하는지 확인하기 위해 노력하고있어. 이 콜백 내에서 this을 어떻게 사용할 수 있습니까?

편집 1 :

가 나는 또한 첫 번째 조각에서 this.pass = hash;도 내가 신경 개체에 아무것도하지 않는 것을 알 수 면밀한 관찰을 복용합니다. 전체에서 선 후 2

var self = this

+1

라인이 'VAR 자체에 = this' 다음,'self.hashPassword()' – adrichman

+1

의미와 작동; 자유롭게 대답을 남겨주세요. – JuJoDi

답변

1

,

self.hashPassword()

:

User.prototype.save = function (fn) { 
    var self = this; 
    // See if the username exists 
    userModel.findOne ({ 'user': self.user }, function (err, user) { 
    if (err) return fn (err); 
    if (!user) { 
     user = new userModel({ 
     user: self.user, 
     pass: self.pass 
     }); 
     console.log('user: ' +user); 

     self.hashPassword (user.pass, function (err, salt, hash) { 
     if (err) return fn (err); 
     self.pass = hash; 
     user.salt = salt; 
     user.pass = hash; 
     user.save (function (err, product, numberAffected) { 
      if (err) return fn (err); 
      return fn(undefined); 
     }); 
     }); 
    } else { 
     // TODO: update all the user fields 
     console.log ('user already exists'); 
    } 
    }); 
} 
관련 문제