簡體   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