2015-12-05 33 views
0

数据发送回控制器我有getUsers()中的用户控制像下面如何从模型中Sails.js

getUsers: function(req, res){  
    var results = User.getUsers();   
    return res.send(results); 
} 

我打电话用户模型的getUsers()方法。代码这种方法低于

getUsers: function(){ 
    User.find({}).exec(function findCB(err, found){  
     return found; 
    }); 
} 

现在我怎么得到这个结果(在这种情况下,“发现”)回到控制器?这样我可以使用响应对象将它发送到前端。

好像这些函数调用是异步的..

+0

至少有勇气发布downvoting的原因。它可以帮助我们学习新的东西...... – Chetan

+0

就像很多downvotes一样 - 没有解释就没有意义 - Upvoted,因为在我看来这是一个有效的问题。 – MyStream

回答

1

你的控制器将像:

getUsers: function(req, res){  
       User.getUsers(function (results) { 
        res.json(results); 
       });   
} 

和型号会像:

getUsers: function(cb){ 
    User.find({}).exec(function(err, found){  
    if(err) // your error handling code 
    cb(found); 
    }); 
} 

CB是回调函数

  • 是的“高脂模型,骨干控制器“,是跟随M的好方法VC
+0

有一个胖的模型,然后他们是一个臃肿的模型。为什么要创建模型已有的模型方法,并将该重复方法放置在控制器中,而不是使用原始方法?同时你也没有通过这样做让你的控制器变得更瘦。您仍然需要在模型上调用该方法。 – Meeker

+1

在模型中使用数据库交互查询的原因之一是代码的可重用性,也影响了查询优化,因此保留了MVC的概念。 – rroxysam

+0

从控制器直接调用'User.find({})'仍然具有您提到的所有优点。该模型已经是你寻求的分离。你的答案只是将一个函数包装在模型中的另一个函数内部,并告诉控制器使用它而不是已经存在的函数。它复制代码,不会使控制器变得更小。如果模型已经具有'add(x,y){return x + y)',然后创建另一个函数addNumbers(x,y){return add(x,y)}',那么它是一样的,应该从他的控制器中调用第二个而不是第一个。 – Meeker

0

是否有您所创建的模型里面多余的方法的原因。您可以直接访问所有用户。

getUsers: function(req, res){  
    User.find().exec(function(results){ 
    return res.ok(results); 
    })   
} 
+0

我知道控制器cab与数据库交谈...但我已经阅读了很多作者,他们说你的模型(不是控制器)应该与数据库交谈。 “胖模型,瘦身控制器”的概念也是这样说的。 – Chetan

+0

在那个例子中'用户'是你的模型,正在与数据库交谈。 – Meeker