使用请求模块检索JSON并返回值
我使用这个模块在Nodejs中发出HTTP请求 示例代码:使用请求模块检索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
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
。我该怎么做?