2017-02-08 34 views
0

說我有找到一個集合中的所有開放式投注功能:渲染與把手貓鼬會額外數據

app.get('/profile/bet-history', function(req, res, next){ 
     var user = req.user; 
     if(user){ 
      Bet.find({$query : {"username" : user.username, "settled":false, "paired" : true}, $orderby : {_id : -1}}) 
       .then(function(doc){ 
        res.render('profile/bet-history', {bets: doc, user: req.user}); 
      }); 
     }else{ 
      res.redirect('/login'); 
     } 
    }); 

而且我有這使得上述betsuser數據的把手模板:

<tbody> 
    {{#if bets}} 
     {{#each bets}} 
      <tr> 
       <td>{{date this.createdAt}}</td> 
       <td>{{this.market}}({{this.bet}})</td> 
       <td>{{this.stake}}</td> 
       <td>{{this.odds}}</td> 
       <td>{{render the potential returns here}}</td> 
      </tr> 
     {{/each}} 
    {{else}} 
     <tr> 
      <td> 
       <p>You have no matched bets. Please come back later.</p> 
      </td> 
     </tr> 
    {{/if}}   
</tbody> 

我想通過調用一些函數calcReturns()對從.find()返回的每個單獨結果執行快速「潛在回報」計算,該函數接受返回的賭注並將s採取機率,然後用.find()調用返回的數據來呈現該函數的結果,該調用將在{{#each}}部分中呈現。一個關鍵的要求是我想在外部.js文件中使用一個函數,我不想在Mongo數據庫中使用另一個字段。

回答

1

擴展在jervtub的答案的其他屬性,才能使用外部JS功能,這裏的最終解決方案:

GET請求

var updates = require('./update.js'); 

app.get('/profile/bet-history', function(req, res, next){ 
     var user = req.user; 
     if(user){ 
      Bet.find({$query : {"username" : user.username, "settled":false, "paired" : true}, $orderby : {_id : -1}}) 
       .then(function(doc){ 
        // Add the potential_returns for our render object here 
        doc.forEach(function(x) { 
         updates.calcReturns(x); 
        }) 
        res.render('profile/bet-history', {bets: doc, user: req.user}); 
      }); 
     }else{ 
      res.redirect('/login'); 
     } 
}); 

Update.js文件

module.exports = { 
    calcReturns : function(x){ 
     if(x.bet == "Back"){ 
      x.potential_returns = x.stake * x.odds + x.stake; 
     }else{ 
      x.potential_returns = x.stake * 2; 
     } 
    } 
}; 

把手模板

<tbody> 
    {{#if bets}} 
     {{#each bets}} 
      <tr> 
       <td>{{date this.createdAt}}</td> 
       <td>{{this.market}}({{this.bet}})</td> 
       <td>{{this.stake}}</td> 
       <td>{{this.odds}}</td> 
       <td>{{this.potential_returns}}</td> 
      </tr> 
     {{/each}} 
    {{else}} 
     <tr> 
      <td> 
       <p>You have no matched bets. Please come back later.</p> 
      </td> 
     </tr> 
    {{/if}}   
</tbody> 
1

賭注已經從數據庫中檢索後,您可以在本地計算的潛在回報。

app.get('/profile/bet-history', function(req, res, next){ 
     var user = req.user; 
     if(user){ 
      Bet.find({$query : {"username" : user.username, "settled":false, "paired" : true}, $orderby : {_id : -1}}) 
       .then(function(doc){ 
        // Add the potential_returns for our render object here 
        doc.forEach(function(x) { 
         // Calculate the potential returns 
         x.potential_returns = x.bet * x.odds 
        }) 
        res.render('profile/bet-history', {bets: doc, user: req.user}); 
      }); 
     }else{ 
      res.redirect('/login'); 
     } 
    }); 

potential_returns可以以同樣的方式添加到<tr>doc

<tbody> 
    {{#if bets}} 
     {{#each bets}} 
      <tr> 
       <td>{{date this.createdAt}}</td> 
       <td>{{this.market}}({{this.bet}})</td> 
       <td>{{this.stake}}</td> 
       <td>{{this.odds}}</td> 
       <td>{{this.potential_returns}}</td> 
      </tr> 
     {{/each}} 
    {{else}} 
     <tr> 
      <td> 
       <p>You have no matched bets. Please come back later.</p> 
      </td> 
     </tr> 
    {{/if}}   
</tbody> 
+0

偉大的建議jervtub!這對我來說非常合適!我已經使用了你的想法,並通過創建一個在doc.forEach()調用內部調用的外部函數來擴展一點,以滿足最終需求。謝謝。 – mrneeson