2014-08-27 66 views
3

我得到了我的NodeJS服務器上驗證碼:xml2js:把解析器爲函數

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()返回一個值。

回答

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中

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

對不起,但你的解決方案不工作:('console_log(json)'工作,但函數仍然返回'undefined'。 – Flobesst 2014-08-27 13:35:39