NodeJS ...将JSON保存到一个变量
问题描述:
我对NodeJS有点新手,但我环顾四周,似乎无法找到解决我下面的问题的解决方案。我确信这很简单,但在此先感谢您给我的所有帮助!NodeJS ...将JSON保存到一个变量
我想通过NodeJS做一个简单的JSON刮刀。我需要的是将JSON存储到变量中。问题是,我正在使用Require,他们的例子只是将它记录到控制台。我已经尝试在登录到控制台后添加一个变量,但我只是变得不确定。这里是我下面的代码,这是很简单的,到目前为止:)
// var jsonVariable; Doesn't work, shown as a test
function getJSON(url){
var request = require("request")
request({
url: url,
json: true
}, function (error, response, body) {
if (!error && response.statusCode === 200) {
console.log(body) // Print the json response
//return body; This doesn't work, nor does making a global variable called json and assigning it here. Any ideas?
//jsonVariable = body; // This also doesn't work, returning undefined even after I've called the function with valid JSON
}
})
}
再次感谢这么多的帮助。如果你用“回体”,其中它返回到你能给我:)
答
的问题是,request
方法是异步的,但是你要同步返回结果。您需要发出同步请求(这似乎不适用于您使用的request
包),或者在请求成功响应时传递回调函数以供调用。例如:
var request = require("request")
function getJSON(url, callback) {
request({
url: url,
json: true
}, function (error, response, body) {
if (!error && response.statusCode === 200) {
callback(body);
}
});
}
getJSON('http://example.com/foo.json', function (body) {
console.log('we have the body!', body);
});
答
?该函数被调用为request()函数的参数。您也无法在匿名函数中定义变量,因为您无法在该范围之外访问该变量。
你需要做的是在function getJSON()
之外定义一个变量,然后将主体保存到该变量中。
例如,
var result;
function getJSON(url){
var request = require("request")
request({
url: url,
json: true
}, function (error, response, body) {
if (!error && response.statusCode === 200) {
result = body;
}
});
}
当你'返回body',你将其返回到'功能(错误,响应体)'回调,而不是实际的'getJSON'功能 – squill25
我不明白这一点,在json是一个变量,'body'。如果你需要在其他地方添加回调。 – dandavis
'jsonVariable = body'工作。但是在你调用函数之后,它会在将来的某个时间点被设置。为了证明它的工作原理,在以后的某个时间使用'setTimeout'检查'jsonVariable'的值。这意味着你永远永远永远不会受到压力(我无法强调它),永远不会从异步函数中返回一个值。您需要做的是将回调传递给**接收**值。 – slebetman