[英]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.