[英]How to send all rows of table to Jade using node.js
如何使用node.js將原始控制台值的所有行發送到Jade? 此代碼僅將WCF服務的1行發送給Jade。
var response = result['s:Envelope']['s:Body'] [0].OrderReportResponse[0].exeReport[0];
console.dir(JSON.stringify(response));
var marketOrder = response['a:MarketOrder'];
for (var i = 0; i < marketOrder.length; i++) {
var date = marketOrder[i]['a:SendingTime'];
var time = marketOrder[i]['a:TransactTime'];
var buyorSell = marketOrder[i]['a:Side'];
var orderQty = marketOrder[i]['a:OrderQty'];
var exchange = marketOrder[i]['a:Exchange'];
var contractName = marketOrder[i]['a:ContractName'];
var price = marketOrder[i]['a:Price'];
var filled = marketOrder[i]['a:mFile'];
var account = marketOrder[i]['a:Account'];
var wrkQty = marketOrder[i]['a:WrkQty'];
var execute = marketOrder[i]['a:ExeQty'];
var undQty = marketOrder[i]['a:UndQty'];
var type = marketOrder[i]['a:OrdType'];
var modifier = marketOrder[i]['a:Modifier'];
var trigPrice = marketOrder[i]['a:TrigPrice'];
var status = marketOrder[i]['a:Status'];
var avgPrice = marketOrder[i]['a:AvgPrice'];
var tif = marketOrder[i]['a:TimeInForce'];
var route = marketOrder[i]['a:Route'];
var originator = marketOrder[i]['a:Originator'];
var currentUser = marketOrder[i]['a:CurrentUser'];
var algoName = marketOrder[i]['a:AlgoName'];
var parentId = marketOrder[i]['a:ParentId'];
var tTOrderId = marketOrder[i]['a:TTOrderId'];
var ExchOrderId = marketOrder[i]['a:exchOrderId'];
//console.dir(JSON.stringify(date, time, buyorSell, orderQty, exchange, contractName, price, filled, account, wrkQty, execute, undQty, type, modifier, trigPrice, status, avgPrice, tif, route, originator, currentUser, algoName, parentId, tTOrderId, ExchOrderId));
res.render('aaa', {title: date, title1: time, title2: buyorSell, title3: orderQty, title4: exchange, title5: contractName, title6: price, title7: filled, title8: account, title9: wrkQty, title10: execute, title11: undQty, title12: type, title13: modifier, title14: trigPrice, title15: status, title16: avgPrice, title17: tif, title18: route, title19: originator, title20: currentUser, title21: algoName, title22: parentId, title23: tTOrderId, title24: ExchOrderId});
return res.send();
您有兩個主要錯誤。 首先,在Express中,每個視圖只能渲染和發送一次響應。 其次,您的return
調用導致循環在第一次嘗試后立即退出,因此它僅返回第一行。 如果不是,則為return
語句。 將這些調用嵌套在循環中將導致呈現最后一行。
避免在循環內嵌套渲染調用或響應發送-甚至根本不在Express視圖內產生循環。 無需將25個局部變量發送到您的Jade模板; 只需將marketOrder
響應對象發送到Jade模板,然后在模板內的對象上進行迭代即可將所有行附加到結果中。
您的Express路線代碼應如下所示:
var response = result['s:Envelope']['s:Body'][0].OrderReportResponse[0].exeReport[0];
console.dir(JSON.stringify(response));
var marketOrder = response['a:MarketOrder'];
res.render('aaa', {orders: marketOrder});
return res.send();
在您的Jade模板中,我建議使用這樣的mixin遍歷行並將數據記錄到控制台。 我沒有為每個列硬編碼tr值,而是將所有名稱作為一個數組包含在mixin中以進行迭代。 為了使事情更干燥,我添加了一個條件,該條件允許mixin也用於thead
行。
mixin tableRow(data)
-
var cols = ['SendingTime','TransactTime','Side','OrderQty',
'Exchange','ContractName','Price','mFile','Account',
'WrkQty','ExeQty','UndQty','OrdType','Modifier','TrigPrice',
'Status','AvgPrice','TimeInForce','Route','Originator',
'CurrentUser','AlgoName','ParentId','TTOrderId','exchOrderId']
tr
each col in cols
if data == 'head'
th=col
else
td= data['a:' + col]
然后,在您的Jade文件的HTML中,遍歷marketOrder
數組以將行追加到表中,並記錄該行各自的數據在服務器端,如下所示:
table
thead
+tableRow('head')
tbody
each row in marketOrder
- console.log(JSON.stringify(row))
+tableRow(row)
table(cell)mixin tableRow(data)-var cols = ['SendingTime','TransactTime','Side','OrderQty','Exchange','ContractName','Price','mFile','Account', 'WrkQty','ExeQty','UndQty','OrdType','Modifier','TrigPrice','Status','AvgPrice','TimeInForce','Route','Originator','CurrentUser','AlgoName ','ParentId','TTOrderId','exchOrderId']
tr
each col in cols
if data==='head'
th=col
else
td= data['a:'+col]
表thead + tableRow('head')tbody#tt訂單中的每一行-console.log(row)+ tableRow(row)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.