2012-10-30 18 views
5

我試圖在集合更新後運行某些插入語句。例如,如果用戶將嵌入文檔位置添加到他們的用戶文檔,我想也將該嵌入文檔插入到單獨的位置集合中。有沒有辦法在服務器端做到這一點,以確保操作運行?如何在保存流星之前更改對象服務器端

+0

一個項目,我知道,你可以調用一個方法服務器端兩者都做更新和插入,但將有來自於取消延遲補償的負面後果我所理解的。 – HGandhi

回答

-1

你需要做的的方法..你可以通過實現客戶端的方法存根保持延遲補償:

調用客戶端的方法定義了的 服務器方法相關聯的存根功能一樣的名字。如果你不想要,你不必爲你的方法定義一個存根(stub) 。在這種情況下,方法調用只是 ,就像其他系統中的遠程過程調用一樣,您將不得不等待 以獲取服務器的結果。

如果你確實定義了一個存根,當一個客戶調用一個服務器方法時, 也會並行地運行它的存根。在客戶端上, 存根的返回值將被忽略。存根以其副作用運行:它們是 ,旨在模擬服務器方法將執行的操作的結果, 但不等待往返延遲。如果存根引發異常,它將被記錄到控制檯。

在這裏看到我的流星存根例如:https://stackoverflow.com/a/13145432/1029644

+0

你有沒有例子說明如何實現上述存根?我正在看StackOverflow上的一些例子,例如[this one](http://stackoverflow.com/questions/12231712/when-to-use-meteor-methods-and-utilizing-stubs),但我仍然有點困惑至於如何實現這一點。 – HGandhi

3

如果你願意使用一些代碼,我寫的(https://gist.github.com/matb33/5258260),你可以連接在像這樣:

編輯:代碼現在是部分在https://github.com/matb33/meteor-collection-hooks

var test = new Meteor.Collection("test"); 

if (Meteor.isServer) { 
    test.before("insert", function (userId, doc) { 
     doc.created = doc.created || Date.now(); 
    }); 

    test.before("update", function (userId, selector, modifier, options) { 
     if (!modifier.$set) modifier.$set = {}; 
     modifier.$set.modified = Date.now(); 
    }); 

    test.after("update", function (userId, selector, modifier, options, previous) { 
     doSomething(); 
    }); 
} 
相關問題