2012-04-04 4 views
1

so in Ich bin mit, was ich denke, eine Bindung Problem, verursacht durch connect-Mongo oder Express.js Hier ist der Code:Möglicher Bindungsverlust in Expressjs?

//Error 
    app.use(function(err, req, res, next) { 

     if (err instanceof noData) { 
      res.send(err, 404); 
     } else { 
      next(err); 
     } 
    }); 

Handler Meine benutzerdefinierte Fehler

function noData(err){ 
    this.code = 0; 
    this.msg = err; 
    console.log(Error); 
    Error.call(this, {code:0, msg:err}); 
    Error.captureStackTrace(this, arguments.callee); 
}; 
noData.prototype.__proto__ = Error.prototype;  

Wurffehler hier:

err = true; 
    //if(err) throw new noData('No Password'); 
    //Get user from database 
    db.collection('users').find({}, {limit:1}).toArray(function(err, result) { 
    if(err) throw new noData('No Data');    
    }); 

Der erste Fehler löst korrekt aus, aber der zweite löst den allgemeinen nodejs-Fehler aus.

throw e; // process.nextTick error, or 'error' event on first tick 

Was mache ich hier falsch? Ist connect-mongo irgendwie bindend? Alle Gedanken werden sehr geschätzt.

Antwort

0

Das Problem liegt nicht in Express-oder Connect-Mongo, der Rückruf ist in einem anderen Bereich. Um dies zu beheben, fügen Sie einfach ein (this) zum Ende des Anrufs hinzu.

//Get user from database 
    db.collection('users').find({}, {limit:1}).toArray(function(err, result) { 
    if(err) throw new noData('No Data');    
    }(this)); 

Jetzt Knoten weiß über meine benutzerdefinierte Fehler. (Hallelujah) Dies ist im Wesentlichen ein iife, die mir erlaubt, in einem param übergeben.