简体   繁体   English

NodeJS回调不是函数异步瀑布

[英]NodeJS Callback not a function Async waterfall

I've been writing a simple server, and have come across an issue where I get a callback undefined error, despite having a callback parameter in my function header. 我一直在编写一个简单的服务器,遇到一个问题,尽管我的函数头中有一个回调参数,但我得到了一个回调未定义错误。 Every example I've seen on Google has been people not having a callback parameter, but I seem to have one? 我在Google上看到的每个示例都是没有回调参数的人,但是我似乎有一个? The error that is thrown is TypeError: callback is not a function. 引发的错误是TypeError:回调不是函数。

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);});
});
   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
    });
},

The inner function in pool.query takes 2 parameters: err and rows . pool.query的内部函数采用2个参数: errrows So in the returning callback , it requires 2 parameters. 因此,在返回的callback ,它需要2个参数。 Since 1st parameter is err , in callback use null since it need to be called only if(!err) condition is satisfied. 由于第一个参数是err ,因此在callback使用null因为只有if(!err)满足if(!err)条件时才需要调用它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM