[英]How to pass a data array from express.js to ejs template and render them
[英]Express.js read xml file data and pass the data as an array
我正在嘗試使用Express.js構建Node.js Web應用程序,該應用程序從外部xml文件讀取值,並將所有數據值存儲在單個數組中。 有多個XML文件要讀取,因此重復相同的過程。
function loadSoftwareRequestXML(filename){
var xmlparser = new xml2js.Parser();
var software_request = new Array();
var filepath = "/project_requests/" + filename;
fs.readFile(filepath, "utf-8", function(error, values){
xmlparser.parseString(values, function(error, xmlfile){
var xmldata = xmlfile;
date_requested = xmldata.ProjectRequest.DateRequested;
client_org = xmldata.ProjectRequest.ClientOrganization;
proposed_budget = xmldata.ProjectRequest.ProposedBudget;
contact_name = xmldata.ProjectRequest.ContactName;
delivery_date = xmldata.ProjectRequest.DeliveryDate;
requirements = xmldata.ProjectRequest.UserRequirements;
//software_request = [date_requested, client_org, proposed_budget, contact_name, delivery_date, requirements];
software_request.push(date_requested);
software_request.push(client_org);
});
});
console.log(software_request);
return software_request;
}
我遇到的問題是,對於“ software_request”,存儲檢索到的xml數據的數組變量,當它位於xmlparser函數內部時,它可以工作。 但是,當在return語句之前使用console.log()對其進行跟蹤時,它將成為一個空數組。
您將如何解決? 請隨意發表評論。 任何幫助或建議,不勝感激。
在node.js中,I / O是異步的,因此readFile
和parseString
類的函數不會在調用它們的同一事件循環中完成。 這意味着將首先調用在它們之后編寫的代碼。
當異步事件完成時,有很多方法可以表示其完成並對其做出反應。 回調在node.js中非常普遍。 當異步事件完成時,將調用您作為參數傳遞給這些函數的function (error value)
。
fs.readFile(file, cb);
return software_request; // this gets called before `cb`
為了保持這種模式,您可以將回調傳遞給loadSoftwareRequestXML
function loadSoftwareRequestXML(filename, cb){
const xmlparser = new xml2js.Parser();
const software_request = [];
const filepath = "/project_requests/" + filename;
fs.readFile(filepath, "utf-8", function(error, values){
xmlparser.parseString(values, function(error, xmlfile){
/* snip */
console.log(software_request);
cb(error, software_request);
});
});
}
本質上,您不能從回調return
。
如果錯誤在那里,您也應該處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.