NodeJS ...将JSON保存到变量

时间:2015-04-12 21:13:48

标签: javascript json node.js require

我是NodeJS的新手,但是我已经四处看了看,似乎找不到下面问题的解决方案。我确定它很简单,但要事先感谢你能给我的所有帮助!

我试图通过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
    }
})
}

再一次,非常感谢你能给我的任何帮助:)

2 个答案:

答案 0 :(得分:4)

问题是request方法是异步的,但您尝试同步返回结果。您需要发出同步请求(使用您正在使用的request包似乎不可能),或者在请求成功响应时传递回调函数。 e.g:

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);
});

答案 1 :(得分:0)

如果你使用'返回身体'它回到哪里?该函数被称为request()函数的参数。您也无法在匿名函数中定义变量,因为您无法在该范围之外访问该变量。

您需要做的是在function getJSON()之外定义变量,然后将body保存到该变量。

如,

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; 
      }
  });
}