代码之家  ›  专栏  ›  技术社区  ›  RobDeFlop

nodejs-从请求返回json

  •  0
  • RobDeFlop  · 技术社区  · 7 年前

    我目前正在nodejs中做一些事情,现在我有以下问题: 当我从一个http请求获得一个json对象并想要返回它时,它显示 "undefined" 是的。

    下面是我不工作的nodejs代码:

     function verifyUser(uname,pword){
        var options = {
            url: 'CENSORED',
            method: 'POST',
            headers: headers,
            form: {'Username':uname, 'Password':pword, 'Key':key}
        }
        request(options,function(error,response,body){
            if(!error && response.statusCode == 200){
                return body;
            }
        })    
    }
    
    var test1 = verifyUser("RobDeFlop","CENSORED");
    console.log(test1);
    

    但当我换掉 return 用一个 console.log 它显示了json对象。 我希望有人能帮助我:)

    1 回复  |  直到 7 年前
        1
  •  1
  •   acenturyandabit    7 年前

    啊,第一次在node中学习异步js的乐趣:3

    正如@mark_m所提到的,请求中的函数只有在处理请求之后才被调用。因此,不能从verifyuser()函数返回变量。verifyuser()在发送请求后立即返回,并在收到响应后调用request()中的函数。

    理想情况下,您应该通过提供回调函数来遵循异步流:

    //We'll define some function called 'callback'
    function verifyUser(uname,pword, callback){
        var options = {
            url: 'CENSORED',
            method: 'POST',
            headers: headers,
            form: {'Username':uname, 'Password':pword, 'Key':key}
        }
        request(options,callback);
        // Here I've changed your inline callback function to the one passed to verifyUser as an argument. 
    }
    
    
    // Then, your main code:
    verifyuser("RobDeFlop","CENSORED", next);
    function next(error,response,body){
            if(!error && response.statusCode == 200){
                //Do useful stuff with the body here.
            }
        })    
    }