Функция отправки Nodejs для ejs
В 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 // вернуть неопределенное
но:
app.locals.count = function(id, call){
var myId = mongoose.Types.ObjectId(id)
var caca = 2;
call(caca);
}
в index.ejs // возвращаем 2
функция подсчета неверный метод возврата..
1 ответ
Просто зарегистрируйте эту функцию в 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>
<% }); %>