2012-10-30 10 views
5

Próbuję uruchomić niektóre instrukcje wstawiania po zaktualizowaniu kolekcji. Na przykład, jeśli użytkownik doda położenie dokumentu osadzonego do dokumentu użytkownika, chciałbym również wstawić ten osadzony dokument do oddzielnego zbioru Lokalizacja. Czy istnieje sposób, aby to zrobić po stronie serwera, aby operacja była gwarantowana?Jak zmienić stronę serwera przed zapisaniem w Meteoru

+0

Zdaję sobie sprawę, że można wywołać po stronie serwera metodę do zrobienia zarówno aktualizację i wstawić, ale to miałoby negatywny skutek usunięcia z kompensacją latencji co rozumiem. – HGandhi

Odpowiedz

-1

trzeba by zrobić to w sposób .. można zachować opóźnienia kompensacji poprzez wdrożenie metody po stronie klienta niedopałek:

wywoływanie metod na kliencie definiuje funkcje pośredniczące związane z metod serwerowej Takie samo imię. Jeśli nie chcesz, nie musisz definiować kodu pośredniczącego dla metody . W takim przypadku wywołania metod są tylko , podobnie jak zdalne wywołania procedur w innych systemach, a będziesz musiał czekać dla wyników z serwera.

Jeśli zdefiniuj kod pośredniczący, gdy klient wywoła metodę serwera, będzie również uruchamiał swój kod pośredniczący równolegle. Na kliencie zwracana wartość kodu pośredniego jest ignorowana. Stuby są uruchamiane ze względu na swoje skutki uboczne: są one przeznaczone do symulacji wyniku działania metody serwera, ale nie czekając na opóźnienie w podróży w obie strony. Jeśli kod pośredniczący zgłasza wyjątek , zostanie zalogowany do konsoli.

zobaczyć moją Meteor przykładowe skrótowe tutaj: https://stackoverflow.com/a/13145432/1029644

+0

Czy masz przykład, w jaki sposób zaimplementować te stubs? Patrzę na kilka przykładów na StackOverflow takich jak [ten jeden] (http://stackoverflow.com/questions/12231712/when-to-use-meteor-methods-and-utilizing-stubs), ale wciąż jestem trochę zdezorientowany jak to wdrożyć. – HGandhi

3

Jeśli jesteś gotów użyć kodu napisałem (https://gist.github.com/matb33/5258260), można podłączyć w taki sposób:

EDIT: Kod jest obecnie częścią projektu w 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(); 
    }); 
} 
Powiązane problemy