2014-10-03 108 views
0

僅當我輸入最後一個xml元素的ID時,此代碼纔會返回內容。 我想輸入內容和頁面時,我鍵入任何元素的ID。 如何做到這一點?節點js返回任何req.params.id XML元素app.get

var libxmljs = require("libxmljs"); 
var xml = ('/Path/Apples.xml'); 
fs.readFile(__dirname + '/Apples.xml', function (err, data) { 


    var xmlStr = data.toString(); 
    var xmlDoc2 = libxmljs.parseXmlString(xmlStr); 
var Apple = xmlDoc2.get('Apples').childNodes(); 

    for (var i = 0; i < Apple.length; i++) { 
    var nameattr = xmlDoc2.get('Apples').get('Apple').attr('id').value(); 
    var AppleId = Apple[i].attr('id'); 

    if (AppleId !== null) { 
     var AppleIdVal = AppleId.value(); 
     console.log('somename ' + AppleIdVal); 

     app.get('/obj/:id', function (req, res) { 
      if (req.params.id == AppleIdVal) { 


       console.log('nameAttr: ' + AppleIdVal); 
       res.json('This is id: ' + AppleIdVal); 

      } 


     }); 
    } 
} 

回答

0

只有函數閉包可以捕獲當前變量值那樣的,不if() {}塊。此外,您目前每次都添加一堆重複路線AppleId不是null。考慮重寫你的邏輯,例如:

var libxmljs = require('libxmljs'); 

var xmlDoc2, Apple; 

fs.readFile(__dirname + '/Apples.xml', function(err, data) { 
    xmlDoc2 = libxmljs.parseXmlString(data.toString()); 
    Apple = xmlDoc2.get('Apples').childNodes(); 

    // move your `app.listen()` here instead so that the file will have been read 
    // before processing any requests 
}); 

app.get('/obj/:id', function (req, res) { 
    for (var i = 0; i < Apple.length; i++) { 
    var nameattr = xmlDoc2.get('Apples').get('Apple').attr('id').value(), 
     AppleId = Apple[i].attr('id'); 

    if (AppleId !== null) { 
     var AppleIdVal = AppleId.value(); 
     if (req.params.id == AppleIdVal) 
     return res.json('This is id: ' + AppleIdVal); 
    } 
    } 
    res.json('id not found'); 
}); 

此外,你可以考慮換出的循環代碼,做了一個XPath查詢找到id