Эмм... Тут тебе лучше использовать промисы, т.е должно получиться чтото вроде.
index: function (req, res, next) {
var Promise = require("bluebird");
var countAllPosts = Post.count()
.then(function countResult (count) {
// Сторонние действия, итерации, и т.д...
return count; // Обязательно - так мы возвращаем объект promise
});
var posts = Post.find()
.sort({
"id": "desc"
})
.paginate({
page: req.param("page", 1),
limit: 5
})
.then(function (posts) {
return posts; // также возвращаем promise объект
});
Promise
// Метод объеденения нескольких промисов.
.join(countAllPosts, posts, function (count, posts) {
res.view({
countPosts: countPosts,
posts: posts
});
})
// Независимая обработка ошибок, вне основной логики: cb(err, data) не лучший способ работы с данными в nodejs.
.catch(function (errors) {
res.serverError(); // res.send(500) не родной метод sails и его лучше не использовать, имхо
})
}
Самым основным соком тут являються промисы, из библиоткеки
bluebird, и ключевой фактор - возврат объекта с обещанием. После этого - создав несколько переменных с действиями на этой технологии - мы объеденяем их с помощью join - и библиотека асинхронно выполняя их создает функцию с результатами выборки.
После этого мы отдаем данные - выполненные без ошибок. Сами ошибки мы обрабатываем независимо от общей логики. Вот так вот. Лично от себя советую подробнее изучить Bluebird - в Sails все работает на нем.
По поводу твоих личных ошибок - ты сделал 2 разные области действия. Колбэк не встраивает переменную в основную область действия - он выполняеться асинхронно внутри самой функции - и поэтому не видим никаким другим функциям. И ошибка выполнения - это неизвестная переменная. Если же ты хотел чтобы была видна переменная num из колбэка - нужно было внутри колбэка вызвать функцию поиска постов.
P.S - прочитай всю документацию sails. Побольше используй трассировку и логирование ошибок хотябы через sails.log.error.