我正在开发NodeJS应用程序并遇到以下问题:
我正在使用节点模块node-rest-client
来使用API发出REST请求。为了我的目的,我使用模块提供的post
方法。我需要获取json响应并将其写入单独的变量并返回它们。
我在returnData
方法之外定义了client.post
变量。我需要更新函数内的returnData
变量,该变量作为参数传递给client.post
方法。
但我这里有一个范围问题。虽然我尝试更新该函数内的returnData
变量,但是当执行从client.post
函数返回时,我看到在调用之前我设置了相同的值(在这种情况下为null,但可能是任何值) client.post
函数仍然存在于变量中。
如何很好地定义范围,以便我可以更新函数内部的外部变量作为参数传递给另一个函数?任何帮助将不胜感激。
以下是我的代码:
module.exports = function(){
require("../config");
var restClient = require('node-rest-client').Client;
var client = new restClient();
var sessionID = null,
reqID = 1;
var login = function(username, password){
var requestParams = {};
var apiParams = {};
requestParams.jsonrpc = "2.0";
requestParams.method = ZABBIX_API_METHODS.login;
apiParams.user = username;
apiParams.password = password;
requestParams.params = apiParams;
requestParams.id = reqID;
requestParams.auth = null;
var args = {
data: requestParams,
headers:{"Content-Type": "application/json-rpc"} // ask response type to be application/json-rpc
};
var returnData = {};
returnData.status = null;
returnData.data = null
client.post(ZABBIX_API, args, function(resData,rawRes){
if(rawRes.statusCode == 200){
returnData.status = rawRes.statusCode;
returnData.data = resData;
}
else{
returnData.status = rawRes.statusCode;
returnData.data = "Request Failed!";
}
reqID = reqID + 1;
console.log(returnData.data);
});
console.log("SessionID:"+getSessionID());
return returnData;
}
var functions = {
login: login
}
return functions;
}
谢谢。
答案 0 :(得分:-1)
.post
是Async,你应该这样做,
var login = function(username, password, callback){
..................
client.post(ZABBIX_API, args, function(resData,rawRes){
if(rawRes.statusCode == 200){
returnData.status = rawRes.statusCode;
returnData.data = resData;
}
else{
returnData.status = rawRes.statusCode;
returnData.data = "Request Failed!";
}
reqID = reqID + 1;
return {login: returnData};
});
//remove all below return statements