【发布时间】:2014-11-03 09:29:11
【问题描述】:
我正在开发一个 NodeJS 应用程序并遇到以下问题:
我正在使用节点模块node-rest-client 通过 API 发出 REST 请求。我使用模块提供的post 方法来实现我的目的。我需要获取 json 响应并将其写入单独的变量并返回它们。
我在client.post 方法之外定义了returnData 变量。我需要在作为参数传递给client.post 方法的函数中更新这个returnData 变量。
但我这里有一个范围问题。尽管我尝试更新该函数内的returnData 变量,但当执行从client.post 函数返回时,我看到我在调用client.post 函数之前设置的相同值(在本例中为null,但可能是任何值)仍然存在于变量中。
我怎样才能很好地定义范围,以便我可以更新作为参数传递给另一个函数的函数内部的外部变量?任何帮助将不胜感激。
以下是我的代码:
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;
}
谢谢。
【问题讨论】:
标签: javascript node.js scope