2015-12-05 53 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