2016-12-11 5 views
0

Ich habe einen einfachen Server geschrieben und bin auf ein Problem gestoßen, bei dem ich einen Callback-Fehler bekomme, obwohl er einen Callback-Parameter in meinem Funktionskopf hat. Jedes Beispiel, das ich bei Google gesehen habe, waren Leute, die keinen Callback-Parameter hatten, aber ich habe anscheinend einen? Der Fehler, der ausgelöst wird, ist TypeError: Callback ist keine Funktion.NodeJS Callback keine Funktion Async Wasserfall

Code:

app.post("/api/info/", function(req, res){ 
    async.waterfall([ 
     function(callback){ 
      debugger; 
      jwt.verify(req.body.jwt, secret.secret, {ignoreExpiration: false}, 
      function(err, decoded){ 
       console.log(err); 
       console.log(decoded.uuid); 
       debugger; 
       if(err) { 
        debugger; 
        console.log("error1: " + err); 
        debugger; 
        res.json({ 
         status: 403 
        }); 
        res.end(); 
        callback("JWT auth failed", null); 
        return; 
       } 
       debugger; 
       callback(null, decoded.uuid); 
      }); 
     }, 
     function(err, token, callback){ //query db for user uuid 


     debugger; 
     pool.query("SELECT * FROM users WHERE INSTR (uuid," + "'" + token + "') > 0", function(err, rows){ 
      if(err) console.log(err); 
      debugger; 
      callback(rows); //where it errors 
     }); 
    }, 
    function(rows, callback){ //get user's school name 
    debugger; 
     var schoolId = rows[0].chapter_uuid; 
     pool.query("SELECT * FROM chapters WHERE INSTR (uuid," + "'" + schoolId + "') > 0", function(err, result){ 
      debugger; 
      callback(rows, result[0].school); 
     }); 
    }, 
    function(rows, chapter, callback){ //return db results to user in json 
     debugger; 
     var canMakeEvent = 0; 
     if(rows[0].is_board){ 
      canMakeEvent = 1; 
     } 
     var info = { 
      firstName: rows[0].first_name, 
      lastName: rows[0].last_name, 
      email: rows[0].email, 
      chapter: chapter, 
      isBoard: canMakeEvent, 
      boardPosition: rows[0].board_position 
     }; 
     res.json({ 
      status: 200, 
      info: info 
     }); 
     res.end(); 
     debugger; 
     callback(null); 
    } 
], function(err){console.log(err);}); 
}); 
+0

Okay, * wo * erhalten Sie den Fehler? –

+0

Es gibt einen Kommentar im Code, direkt unter "SELECT * FROM Benutzer WHERE INSTR". Header der Async-Funktion ist Funktion (err, token, callback). Sorry, wenn der Code schwer zu lesen ist, hat stackoverflow den Tabbing/Abstand verschraubt. –

+0

Danke. Das habe ich übersehen. Das Problem ist für mich noch nicht offensichtlich. Hast du gesehen, was Callback ist, ob es definiert ist? Funktioniert alles (wie die JWT-Validierung) wie erwartet? Ich frage, weil Aufruf 'res.end();' * gefolgt von * 'Rückruf (" JWT Auth failed ", ...' scheint mir als ungewöhnlich, obwohl vielleicht nicht unbedingt falsch. –

Antwort

1
function(err, token, callback){ //query db for user uuid 


    debugger; 
    pool.query("SELECT * FROM users WHERE INSTR (uuid," + "'" + token + "') > 0", function(err, rows){ 
     if(err) console.log(err); 
     debugger; 
     callback(null,rows); //where it errors 
    }); 
}, 

die innere Funktion in pool.query dauert 2 Parameter: err und rows. Also in der Rückkehr callback, erfordert es 2 Parameter. Da der 1. Parameter err ist, verwenden Sie in callbacknull, da es nur if(!err) genannt werden muss Bedingung ist erfüllt.

Verwandte Themen