Nodejs中的回调函数

时间:2013-02-16 01:53:42

标签: node.js callback

我有功能

var checkTokenIsExpired = function(name, token, response) {
LoginToken.find( { name: name, series: token }, function(error, info){
                console.log("info: ", info[0]['expire']);
                if (error) {
                    // response.send("error: %s}", error);
                    response(error);
                }
                if (info.length > 0) {      
                    var expire = new String(info[0]['expire']);
                    // expire = expire.substr(0,26);    
                    var date = new Date(expire);
                    if (date >= new Date()) {                       
                        // response.send("{info: success" );
                        response("success");
                    }
                    else{
                        // response.send("error: token-has-expired");
                        response("token-has-expired");
                    }   
                    console.log("Response: ", info);
                }
                else {
                    response(null);
                }
            } );
}

检查令牌是否已过期?它将返回一个字符串。

我在这里调用这个函数

    exports.updateAccount = function(newData, callback)
{
    Accounts.find({name:newData.body.name}, function(err, docs){
        if (err) {
            callback.send('{error: ' + String(err) + "}");
        }
        if (docs.length==0 || !docs) {
            callback.send("{error: NULL }");
        }
        else {
            checkTokenIsExpired(newData.body.name, newData.body.token, function(error, info){
            if (error){
                        callback.send("{error: " + error + "}");
            // I want to get info here      }               
            console.log("check token: ", info);
            // check info of token is expired or not
            if (info!=null && info!="token-has-expired") {
                var updateString = "";
                if (newData.body.screen_name){
                    Accounts.update( {'name': newData.body.name}, 
                            {
                                "screen_name" : newData.body.screen_name
                            },
                            { 'upsert' : true },
                            function (err, numberAffected, raw) {
                              if (err) return handleError(err);

                            });
                }
                if (newData.body.email){
                    Accounts.update( {'name': newData.body.name}, 
                            {                               
                                "email": newData.body.email
                            },
                            { 'upsert' : true },
                            function (err, numberAffected, raw) {
                              if (err) return handleError(err);

                            });
                }
                if (newData.body.password == ''){


                }   else{
                    var password = encodePassword(newData.body.password, docs[0]['salt']);                  
                    Accounts.update( {'name': newData.body.name}, 
                            {
                                "hassedPass" : password,                                
                            },
                            { 'upsert' : true },
                            function (err, numberAffected, raw) {
                              if (err) return handleError(err);

                            });

                }               


            }
        });

        }

我想在调用checkTokenIsExpired时获取信息,但是当我console.log("info", info)时它返回undefined。

2 个答案:

答案 0 :(得分:1)

在checkTokenIsExpired中,您需要将信息传递给响应回调,否则它不在您的第二个代码的范围内。

至少在你取得成功的情况下:

response("success", info);

您通常会传递null来表示没有错误,而不是传递“成功”。

答案 1 :(得分:0)

我已经解决了问题

checkTokenIsExpired(newData.body.name, newData.body.token, function(error, info)

因为它需要1个参数,但我放2个 将其更改为checkTokenIsExpired(newData.body.name, newData.body.token, function(info) 它会纠正:D