Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用请求模块检索JSON并返回值_Json_Node.js_Request - Fatal编程技术网

使用请求模块检索JSON并返回值

使用请求模块检索JSON并返回值,json,node.js,request,Json,Node.js,Request,我使用这个模块在Nodejs中发出HTTP请求 示例代码: module.exports.getToken = function(){ var token ; request(validLoginRequest, function(err,resp,body){ var json = JSON.parse(JSON.stringify(body)); console.log("from request(): token=" + json.acce

我使用这个模块在Nodejs中发出HTTP请求

示例代码:

module.exports.getToken = function(){
    var token ;

    request(validLoginRequest, function(err,resp,body){
        var json = JSON.parse(JSON.stringify(body));
        console.log("from request(): token=" + json.accesstoken);
        token = json.accesstoken;
    });

    console.log("getToken() returns:" + token);
    return token;
}

但是
标记
始终是
未定义的
。我做错了什么?

您陷入了经典的节点异步陷阱。模块顶级函数中的代码将在内部请求函数中的回调发生之前返回。返回令牌时尚未定义它


最简单的解决方案是从外部函数向下传递回调,并从返回到请求函数的回调调用它。如果这不令人满意,您可以使用$q库返回一个承诺或找到一个模块来执行同步http调用。

根据@Robert Moskal的响应重写代码

module.exports.getToken = function(callback){

    request(validLoginRequest, function(err,resp,body){
        var token ;
        var json = JSON.parse(JSON.stringify(body));
        console.log("from request(): token=" + json.accesstoken);
        token = json.accesstoken;

        console.log("getToken() returns:" + token);
        callback(token);
    });
}
但我想将token作为变量返回。使用您的代码,我必须定义回调函数,如果我只想将令牌传递给另一个变量,该怎么办?例如,在另一种语言(.NET)中,我们可以简单地执行
string getToken(){string token=“”;…//执行一些操作以获取令牌返回令牌;}
在Nodejs中有这样的方法吗?我还想将令牌作为名为
loginToken
的类属性存储在名为
tokenbuilder.js
的文件中,以便以后我可以使用:
tokenbuilder.loginToken
。我该怎么做?