0

我正在使用 mongodb,并且我已经安装了sails-mongodb。我可以从控制器(sails.js)访问 mongodb。

问题 1:我使用sails 命令创建了一个模型,但我不知道如何创建插入、编辑、列出和删除功能。如何将模型加载到控制器中?
如何从控制器调用模型函数?

问题 2: 在以下控制器中,我将打算在视图中使用的值存储在“数据”中。我不知道如何在模型部分创建 db 函数,所以我使用 find 函数从数据库中获取了一些数据,但是如何将该类别值分配给 data.list ?

 module.exports = {
 index: function (req, res) {

var data = new Object();
data.title            = "Page title";   
data.meta_keywords    = "k1,k2,k3";     
data.meta_description = "sample data";
    data.lists = "";

Category.find().done(function(err, category) {
    data.lists = category;
});

bredcrumbs = new Array();
bredcrumbs[0] = {'text':'Home','link':'Link','active':false};
res.view("pages/home",data);    

},  
   _config: {}  
};

我创建了一个名为的模型文件category.js

  tableName: 'category',

  module.exports = {

    attributes: {
      name: {
          type:     'STRING',
          required: true
      },
      keyword: {
          type:     'STRING',
          required: true
      },
      image:        'STRING',
      sort_order: 'INTEGER',
      date_added: 'DATETIME',
      status:   'BOOLEAN'
     },

      toJSON: function() {
        var obj = this.toObject();
        return obj;
      }
}; 
4

1 回答 1

3

发行 1

sails.config.paths.models在通过(默认为)指定的路径中找到的所有有效模型定义app/models都应该在global范围内和初始化sails.models后立即可用。orm hook阅读:您不必手动将模型加载到控制器中。

至于sails模型上的自定义方法,您必须掌握实例/模型与类/集合方法的概念:

类/集合方法

// models/example.js
{
   attributes: {},
   doSomething: function() {
      // scope is not on a model here, there is none initialized
      // e.g. this.toObject() won't work
   }
}

允许您:

Example.doSomething();

模型/实例方法

// models/example.js
{
   attributes: {
     doSomething: function() {
       // scope is on a model here
       // e.g. this.toObject() will work
     }
   },
}

允许您:

Example.findOne(1).exec(function(err, example) {
  example.doSomething();
});

可以在此处找到有关集合的文档:http ://sailsjs.org/#!documentation/models 检查有关实例和类方法的部分。

将此应用于您的示例意味着您必须将toJSON方法移动attributes到要调用的对象中。但是,由于您对其中的数据什么都不做,您也可以将其排除在外。

发行 2

在您的示例中,查询Category记录未到达视图的原因是您res.view在查询的callback. 这应该有效:

Category.find().done(function(err, categories) {
  data.lists = categories;
  res.view("pages/home",data);  
});

我想您阅读 nodejs 中的回调是有意义的。SO的起点: 了解Javascript和node.js中的回调

于 2014-02-05T22:03:10.197 回答