0

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;
};
});
}

in index.ejs // 未定義を返す

しかし :

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

in index.ejs // 2 を返す

アカウント関数の不正なメソッドの戻り..

4

1 に答える 1

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>
  <% }); %>
于 2014-12-20T10:04:49.880 に答える