【问题标题】:sails.js - how to list records from collections?sails.js - 如何列出集合中的记录?
【发布时间】:2013-11-04 19:02:24
【问题描述】:

我正在使用 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;
      }
}; 

【问题讨论】:

  • 提供的答案有问题吗?
  • @marionebl 感谢您的详细回答。我没试过,但看起来不错。我确实按照你告诉问题 2 的方式解决了问题 1 我使用了异步模块....

标签: node.js sails.js


【解决方案1】:

发布 1

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

至于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 记录未到达视图的原因是您在查询的callback 之外调用了res.view。这应该有效:

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

我想你应该阅读一下 nodejs 中的回调。 SO的起点在这里: Understanding callbacks in Javascript and node.js

【讨论】:

    猜你喜欢
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 2019-07-26
    • 1970-01-01
    相关资源
    最近更新 更多