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()调用中被调用,以满足最终的需求。非常感谢。