xml2js:将解析器放入函数中

时间:2014-08-27 12:20:57

标签: json node.js nested-function

我的NodeJS服务器上有这个代码:

function GetXML() {
    fs.readFile('../slideshow.xml.old', function(err, data) {
        parser.parseString(data, function (err, result) {
            var json = JSON.stringify(result);
            console.log(json);
            return json;
        });
    });
}

console.log()运作良好,但事实并非如此:

.get('/', function(req, res) {
    res.end(GetXML());
};

它返回undefined这是非常逻辑的,因为函数是嵌套的(我认为?)。但我不知道如何让GetXML()返回一个值。

2 个答案:

答案 0 :(得分:1)

它正在返回undefined,因为您正在尝试同步执行异步任务。您必须将回调传递给GetXML()函数,例如:

function GetXML(cb) {
  fs.readFile('../slideshow.xml.old', function(err, data) {
    parser.parseString(data, function (err, result) {
      var json = JSON.stringify(result);
      cb(json);
    });
  });
}

,并在.get函数中正确调用它:

.get('/', function(req, res) {
  GetXML(function (json) {
    res.end(json);
  });
};

您应该查看this article,了解callbacks在node.js中的工作方式。

答案 1 :(得分:0)

“GetXML”未返回值。它可以改为:

function GetXML() {
    return fs.readFile('../slideshow.xml.old', function(err, data) {
        parser.parseString(data, function (err, result) {
            var json = JSON.stringify(result);
            console.log(json);
            return json;
        });
    });
}