NodeJS-从请求返回JSON

NodeJS-从请求返回JSON,json,node.js,httprequest,Json,Node.js,Httprequest,我目前正在NodeJS中做一些工作,现在我有以下问题: 当我从HTTP请求中获取JSON对象并想要返回它时,它会显示“undefined” 以下是我的NodeJS代码: function verifyUser(uname,pword){ var options = { url: 'CENSORED', method: 'POST', headers: headers, form: {'Username':uname, 'P

我目前正在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);
但是当我用
console.log
替换
return
时,它会显示json对象。
我希望有人能帮助我:)

啊,第一次在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.
        }
    })    
}

响应返回后,
request
将调用传递给
request
的函数。从该函数返回值与从
verifyUser
返回值不同。您需要传递
verifyUser
回调或返回承诺。您能给我一个回调示例吗?我添加了以下内容:
函数回调(error,response,body){if(!error&&response.statusCode==200){returnbody;}}请求(选项,回调)但仍不工作
返回正文
函数中,下一步(..)
不工作。我需要返回从requestRob收到的JSON,我以前绝对遇到过你的情况。我想从一个异步调用返回一些东西到服务器,但这在nodejs中不是一件事。你能做的最好的事情就是使用一个回调函数,在这个回调函数中你被保证可以访问主体。这就是Node.js处理异步调用的方式。原因是:假设您的请求在回调中抛出错误。然后返回一个实体是没有意义的,因为没有实体,只是一个错误。是的,有点烦人。我来自于在我的浏览器中使用C++和JS,那里所有的东西都很好,同步——在被节点Acyc绊倒之后,我也把节点扔出窗口几天。我希望您的temprament比我的要好:)所以没有任何可能将JSON对象存储在任何变量中?或者像创建其他内容的新变量一样,没有主体?我也应该把它扔出我的窗口。是的,但我怀疑你会发现许多其他请求/响应系统(甚至是AJAX)都有这个功能,所以最好练习使用回调:3