«Property 'next' of object # is not a function» — как исправить?

Рейтинг: 0Ответов: 1Опубликовано: 08.04.2015
// Users
 router.get('/users', checkAuth, require('./users/').get);

-

var Users = require('../../../models/users.js').Users,
HttpMessage = require('../../../components/error/').HttpMessage,
moment = require('moment'),
async = require('async');

exports.get = function(req, res) {
    async.waterfall([
        function(callback){
            Users.find({}).populate('_group', 'name').exec(callback);
        },
        function(users, callback){
            res.render('./pages/users', {
                pageName : 'users',
                pageNameRu : 'Список пользователей',
                users: users,
                moment: moment
            });
        }
    ]);
};

введите описание изображения здесь

Если же убрать:

.populate('_group', 'name')

, то ошибки не будет.

Users.find({}).populate('_group', 'name').exec(callback);

- запрос выполняется и populate работает, данные получаем, но не рендерится страница(скриншот ошибки выше)

Ответы

▲ 1

Вы немного запутались в асинхронных вызовах. async.waterfall возвращает управление сразу. Попробуйте так.

module.exports.get = function(req, res, next) {
    async.waterfall([
        function(callback){
            Users.find({}).populate('_group', 'name').exec(callback);
        },
        function(users, callback){
            res.render('./pages/users', {
                pageName : 'users',
                pageNameRu : 'Список пользователей',
                users: users,
                moment: moment
            }, callback);
        },
        function(html, callback){
          res.send(html);
          callback();
        }
    ], next);
};

Использование этой функции останется каким было

// Users
router.get('/users', checkAuth, require('./users/').get);