Javascript 使用Mongoose渲染额外数据会产生车把

Javascript 使用Mongoose渲染额外数据会产生车把,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,假设我有一个查找集合中所有未结赌注的函数: 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}})

假设我有一个查找集合中所有未结赌注的函数:

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');
        }
    });
我有一个车把模板,用于呈现上述
赌注
用户
数据:

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

{{{#如果下注}
{{{#各赌一次}
{{datethis.createdAt}}
{{this.market}}({{this.bet}})
{{这桩}
{{这个概率}
{{在这里呈现潜在的返回}
{{/每个}}
{{else}
你没有匹配的赌注。请稍后再来

{{/if}

我想对从
.find()
返回的每个单独结果执行一个快速的“潜在回报”计算,方法是调用某个函数
calcReturns()
,该函数接受返回的赌注并将赌注乘以赔率,然后使用
.find()
调用返回的数据呈现该函数的结果,在
{{each}
部分中呈现。一个关键要求是我想在外部.js文件中使用一个函数,我不想在Mongo数据库中使用另一个字段。

从数据库检索赌注后,您可以在本地计算潜在回报

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\u returns
可以用与
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>

{{{#如果下注}
{{{#各赌一次}
{{datethis.createdAt}}
{{this.market}}({{this.bet}})
{{这桩}
{{这个概率}
{{this.potential_returns}}
{{/每个}}
{{else}
你没有匹配的赌注。请稍后再来

{{/if}
从数据库检索赌注后,您可以在本地计算潜在回报

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\u returns
可以用与
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>

{{{#如果下注}
{{{#各赌一次}
{{datethis.createdAt}}
{{this.market}}({{this.bet}})
{{这桩}
{{这个概率}
{{this.potential_returns}}
{{/每个}}
{{else}
你没有匹配的赌注。请稍后再来

{{/if}
扩展jervtub的答案,为了使用外部JS函数,这里是最终的解决方案:

获取请求

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>
把手模板

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>

{{{#如果下注}
{{{#各赌一次}
{{datethis.createdAt}}
{{this.market}}({{this.bet}})
{{这桩}
{{这个概率}
{{this.potential_returns}}
{{/每个}}
{{else}
你没有匹配的赌注。请稍后再来

{{/if}
扩展jervtub的答案,为了使用外部JS函数,这里是最终的解决方案:

获取请求

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>
把手模板

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>

{{{#如果下注}
{{{#各赌一次}
{{datethis.createdAt}}
{{this.market}}({{this.bet}})
{{这桩}
{{这个概率}
{{this.potential_returns}}
{{/每个}}
{{else}
你没有匹配的赌注。请稍后再来

{{/if}
jervtub的好建议!这对我来说非常有效!我使用了您的想法,并通过创建一个外部函数进行了一些扩展,该函数在doc.forEach()调用中被调用,以满足最终的需求。谢谢。非常好的建议,jervtub!这对我来说非常有效!我使用了您的想法,并通过创建一个外部函数进行了一些扩展,该函数在doc.forEach()调用中被调用,以满足最终的需求。非常感谢。