2012-08-16 34 views
0

我在驗證使用expressjs和mongodb的東西時遇到了一些問題。在驗證mongodb和expressjs中的問題中的問題

這是評論類

// mongodb configuration 
var Server = require('mongodb').Server, 
    Db  = require('mongodb').Db, 
    ObjectID = require('mongodb').ObjectID, 
    server = new Server('localhost',27017,{auto_reconnect:true}), 
    db  = new Db('fantacalcio',server); 
// mongodb end configuration 


var UserModel = function() { 

    // max and min username length 
    this.username_max = 15; 
    this.username_min = 6; 
}; 

// create funcion 
UserModel.prototype.create = function(req,callback) { 

    // opening connection 
    db.open(function(err,db){ 
    if(!err){ 

     // choosing the collection 
     db.collection('user',function(err,collection){ 
      if(err){ 
      console.log(err); 
      } 
      else{ 

      // Passing the req.body data and a callback to the validate function (see below) 
      this.validate(req,function(results){ 

       // if the validate function return true, this will insert the username into the db 
       if(results==true){ 
       collection.insert({username : req.body.username}, function(err,result){ 
        if (!err) { 
        db.close(); 
        callback(200); 
        } 
       }); 
       } 
       else{ 
       callback(results); 
       } 
      }); 
      } 
     }); 
    } 
    }); 

}; 


// validating function 
UserModel.prototype.validate = function(req,callback) { 

    var errors=0; 
    var detail_error; 
    var username = req.body.username; 

    // check the username 
    if(!username || username < this.username_min || username>this.username_max){ 
    errors++; 
    detail_error +="this is an error"; 
    } 

    // will execute the callback witin the error 
    if(errors>0){ 
    callback(detail_error); 
    } 

    // if there arent error will return true 
    else{ 
    callback(true); 
    } 
}; 

我得到的錯誤是

TypeError: Object #<Object> has no method 'validate' 

指的線路:

this.validate(req,function(results){ ....... 

回答

1

有問題的線作爲其中一部分回調,所以this是不會指的UserModel實例時,t他回調被稱爲。 UserModel.prototype.create的第一行應該聲明一個變量(通常稱爲self,但有些人更喜歡that)並將它分配this。然後用它替換回調中的任何this

請記住,this實際上是一個關鍵字,而不是變量,它在閉包中的行爲不像變量。如果你想在閉包中保留它的值,你必須把它複製到一個實際的變量中。