Как получить доступ к нескольким моделям из контроллера

У меня есть модель Locations и модель Recorders. Я хочу иметь возможность передать все данные для обоих наборов данных в мою модель представления. Как я могу получить к ним доступ, потому что я думаю, что они не находятся в области видимости, так как я получаю неопределенные ошибки, потому что я вызываю "все"

https://gist.github.com/3998302

var Main = function () {
  this.index = function (req, resp, params) {
    var self = this;
    var data = {};
    geddy.model.Locations.all(function(err, locations) {
        data.locations = locations;
        geddy.model.Recorders.all(function(err, recorders) {
            data.recorders = recorders;
            self.respond({params: params, data: data}, {
            format: 'html'
            , template: 'app/views/locations/index'
            }
        });
    }););
  };

};

exports.Main = Main;

Фрагмент ошибки:

timers.js:103
            if (!process.listeners('uncaughtException').length) throw e;
                                                                      ^
TypeError: Cannot call method 'all' of undefined
    at index (G:\code\PeopleTracker\app\controllers\main.js:23:24)
    at controller.BaseController._handleAction.callback (C:\Users\Chris\AppData\Roaming\npm\node_modules\geddy\lib\base_
controller.js:387:22)

2 ответа

Очень поздно на вечеринку, но я верю, что вы можете просто позвонить

geddy.model.Locations.all(function(err, locations) {
    geddy.model.Recorders.all(function(err, recorders) {
        var data = {};
        data.locations = locations;
        data.recorders = recorders;
        self.respond({params: params, data: data}, {
        format: 'html'
        , template: 'app/views/locations/index'
        }
    });
}););

Вы могли бы также сказать ответ

self.respond({params: params, locations: locations, recorders: recorders});

но если вы хотите, чтобы все эти данные были доступны из литерала данных, вам нужно, чтобы они были определены в обратном вызове с самой низкой областью действия. Обратные вызовы могут читать выше их области, но они не могут писать выше этого.

Похоже, вы инициализируете data переменная в "неопределенный". Пытаться data = {} вместо. Если это не поможет, я позабочусь о вас.

РЕДАКТИРОВАТЬ

Если это не поможет, попробуйте установить geddy снова:

npm uninstall -g geddy && npm install -g geddy

Если этого не происходит, убедитесь, что ваша БД действительно запущена, убедитесь, что модели определены (попробуйте geddy console проверить ваши модели), и убедитесь, что вы используете последнюю стабильную версию узла.

Другие вопросы по тегам