【问题标题】:Use request module to retrieve JSON and return value使用 request 模块获取 JSON 并返回值
【发布时间】:2014-03-15 16:47:43
【问题描述】:

我使用这个 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.accesstoken);
        token = json.accesstoken;
    });

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

token 始终是undefined。我做错了什么?

【问题讨论】:

    标签: json node.js request


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      根据@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 = ""; ... //do something to get the token return token; } Nodejs 中有这样的方法吗?我还想将令牌作为名为 loginToken 的类属性存储在名为 tokenbuilder.js 的文件中,以便以后可以使用:tokenbuilder.loginToken。我该怎么做?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 2017-11-09
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多