2016-03-07 41 views
2

在我Meteor.methods我有流星,如何回調和錯誤傳遞給調用者的方法

var post= Posts.insert({...}, function(err,docsInserted){ 
    Posts.update({...} , {...}); 
}); 

我想大衛·韋爾登here的建議創建一個插入模型。 我的模型看起來是這樣的:

_.extend(Posts, { 
    ins:function (docID){ 
     return Posts.insert({...}); 
    } 
}); 

在我的方法我有這樣的:

var post= Posts.ins(docID, function(err,docsInserted){ 
    Posts.update({...} , {...}); 
}); 

我如何使用該方法的回調和錯誤處理?我希望能夠在帖子插入成功時執行代碼。

回答

2

望着文檔collection.insert

插入集合中的文檔。返回其唯一的_id。

參數

doc對象

要插入的文件。可能還沒有_id屬性,在這種情況下Meteor會爲您生成一個屬性。

回調功能

可選。如果存在,則用錯誤對象作爲第一個參數調用,如果沒有錯誤,則將_id作爲第二個參數。

據我所知,如果ins執行成功,你想要執行回調函數。鑑於這些信息,以下是我如何構造代碼:

_.extend(Posts, { 
    ins:function (docID, callback){ 
     Posts.insert({...}, function(error, id) { 
      if(error) { 
      callback(error, null); 
      } else { 
      callback(null, id); 
      } 
     }); 
    } 
}); 

您實際上不需要返回任何東西。您可以執行回調函數並適當傳遞參數。然後您可以使用以下代碼調用該函數:

Posts.ins(docID, function(err,docsInserted){ 
    if(error) { 
    // Handle error. 
    } else { 
    Posts.update({...} , {...}); 
    } 
}); 
+0

感謝您的好評。另一個問題是,新模型方法(ins)將從客戶端站點執行嗎? – koolaang

+1

這取決於你在哪裏定義它。只要你沒有在你的'server'文件夾中定義它,那麼它應該是。 –

+0

那麼我該如何拒絕客戶端的訪問呢? – koolaang

相關問題