如何从控制器访问多个模型

时间:2012-11-02 02:53:35

标签: node.js heroku model geddy

我有一个Locations模型和一个Recorders模型。我希望能够将两个数据集的所有数据传递给我的视图模型。我如何访问它们因为我认为它们不在范围内,因为我收到了未定义的错误,因为我称之为'all'

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 个答案:

答案 0 :(得分:0)

所以看起来你正在将data变量初始化为'undefined'。请尝试使用data = {}。如果这不能解决问题,我会对你进行一些故障排除。

修改

如果不适合您,请尝试再次安装geddy:

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

如果没有这样做,请确保您的数据库实际上正在运行,确保定义了模型(尝试geddy console检查您的模型),并确保您使用的是最新版本稳定版本的节点。

答案 1 :(得分:0)

聚会很晚,但我相信你可以打电话

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

但是如果您希望从数据文字中获得所有数据,则需要在最低范围回调中定义它。回调可以在其范围之上读取,但不能在其上面写入。