繁体   English   中英

如何使用node.js将表的所有行发送到Jade

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM