【问题标题】:How to access multiple models from a controller如何从控制器访问多个模型
【发布时间】:2012-11-02 02:53:34
【问题描述】:

我有一个 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;

错误sn-p:

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)

【问题讨论】:

    标签: node.js heroku model geddy


    【解决方案1】:

    所以看起来您正在将data 变量初始化为“未定义”。请改用data = {}。如果这不能解决问题,我会和你一起做一些故障排除。

    编辑

    如果这对您不起作用,请尝试再次安装 geddy:

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

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

    【讨论】:

    • 正确:JavaScript 不像 Perl 那样“自动激活”对象。将属性分配给 undefined 变量不会自动将变量转换为对象引用。
    • 我改变了它,它仍然给我一个错误。 timers.js:103 if (!process.listeners('uncaughtException').length) throw e; ^ TypeError:无法在 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});
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      相关资源
      最近更新 更多