`this.collection` doesn't yet exist, so the `else` path in `saveData` is being taken, which is sent to `connectDB` which calls `MongoClient.connect`, but does not bind `this` to the callback.
This change should work: this.connectDB(this.saveData.bind(this)); On Mon, Aug 12, 2013 at 7:22 PM, bodo <vuducbinhs...@gmail.com> wrote: > I did a pretty code: > > var Square = function(id,order,color,state) { > > this.id = id; > this.order = order; > this.color = color; > this.state = state; > this.connected = false; > > MongoClient.connect(config.mongoURL, (function(err, db) { > this.connected = true; > this.db = db; //db > this.collection = db.collection("squares"); //collection > }).bind(this)); > } > > Square.prototype.connectDB = function(callback){ > > (function(that){ > MongoClient.connect(config.mongoURL, function(err, db) { > console.log("connected"); > this.connected = true; > this.db = db; //db > this.collection = db.collection("squares"); //collection > > //callback(that); > callback(); > > }); > > })(this); > } > > > Square.prototype.test = function(){ > console.log("test"); > } > > //export data > Square.prototype.exportData = function(){ > > var rtArr = { > id:this.id, > order:this.order, > color:this.color, > state:this.state > }; > > return rtArr; > } > > //save datas to mongo > Square.prototype.saveData = function () { > > if (this.collection){ > > *var doc = this.exportData();* > this.collection.insert(doc,function() { > console.log('inserted'); > }); > }else{ > this.connectDB(this.saveData); > } > } > > var square = new Square(6,1,'red',1); > square.saveData(); > > When I run this code, that display: > > throw err > ^ > TypeError: Object #<Object> has no method 'exportData' > > Why it can not understand *var doc = this.exportData(); ?* > * > * > Someone can help me ? Thank you very much > > -- > -- > Job Board: http://jobs.nodejs.org/ > Posting guidelines: > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > You received this message because you are subscribed to the Google > Groups "nodejs" group. > To post to this group, send email to nodejs@googlegroups.com > To unsubscribe from this group, send email to > nodejs+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/nodejs?hl=en?hl=en > > --- > You received this message because you are subscribed to the Google Groups > "nodejs" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to nodejs+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to nodejs@googlegroups.com To unsubscribe from this group, send email to nodejs+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en --- You received this message because you are subscribed to the Google Groups "nodejs" group. To unsubscribe from this group and stop receiving emails from it, send an email to nodejs+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.