Nodejs向ejs发送函数

时间:2014-12-20 09:49:24

标签: node.js function express ejs embedded-javascript

app.js中的

    app.locals.count = function(id, call) {
var myId =  mongoose.Types.ObjectId(id)
db.collection('comment').aggregate({$match: {postid: myId}}, {$group : {_id: '$postid', nb: {$sum: 1}}}, 
function(err, cb){
for (i = 0; i < cb.length; i++) { var la = cb[i]; return call(la.nb);  };
});
}
index.ejs中的

<% count(indexpost._id, function( result ){ %> <%= result %> <% }); %>

//返回没有结果但是:

<% count(indexpost._id, function( result ){ %> <%= console.log(result) %> <% }); %>

在终端中返回结果..

我应该如何处理index.ejs中的显示结果?感谢

编辑#1 ####################################

app.locals.count = function(id, call){
var myId =  mongoose.Types.ObjectId(id)
var caca = ccount(myId);
call(caca);
}

function ccount(myId){
db.collection('comment').aggregate({$match: {postid: myId}}, {$group : {_id: '$postid', nb: {$sum: 1}}}, 
function(err, cb){
for (i = 0; i < cb.length; i++) {
  var la = cb[i];
  var value = la.nb;
  return la.nb;
};
});
}
index.ejs中的

//返回undefined

但是:

app.locals.count = function(id, call){
var myId =  mongoose.Types.ObjectId(id)
var caca = 2;
call(caca);
}
index.ejs中的

//返回2

ccount函数坏方法返回..

1 个答案:

答案 0 :(得分:0)

只需在app.locals上注册此功能,其余的路径逻辑保持不变。现在你可以调用ejs上的函数

了 app.js中的

function count(id, call) {
var myId =  mongoose.Types.ObjectId(id)
db.collection('comment').aggregate({$match: {postid: myId}}, {$group : {_id: '$postid', nb: {$sum: 1}}}, 
function(err, cb){
for (i = 0; i < cb.length; i++) { var la = cb[i]; return call(la.nb);  };
});
}

app.locals.count =count ;
index.ejs中的

% count(indexpost._id, function( result ){ %> <%= result %> <% }); %>

如果你有标题,文字等属性我假设你可以做这样的事情

  <% result.forEach(function(item) { %>
<ul>
    <li><%= item.title%></li>

    <li><%= item.text%></li>
</ul>
  <% }); %>