Reputation: 5425
I'm having some issues in validating things using expressjs and mongodb.
This is the commented class
// 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);
}
};
the error I get is
TypeError: Object #<Object> has no method 'validate'
refering to the line:
this.validate(req,function(results){ .......
Upvotes: 0
Views: 178
Reputation: 15003
The line in question is executed as part of a callback, so this
isn't going to be referring to the UserModel
instance when the callback is called. The first line of UserModel.prototype.create
should declare a variable (usually called self
but some people prefer that
) and assign this
to it. Then replace any cases of this
in the callbacks with it.
Remember that this
is actually a keyword, not a variable, and it doesn't behave like a variable in closures. If you want to preserve its value in a closure, you have to copy it into an actual variable.
Upvotes: 1