2013-03-23 13 views

Odpowiedz

7

radziłbym przed wykorzystywaniem, że zamiast umieścić swoje rzeczy w folderach zgodnie z zaleceniami na unofficial meteor faq

Nawet jeśli używasz if (Meteor.isServer) {...} ten blok nadal będą wysyłane do klienta, jeśli nie używać struktury folderów powyżej tj. umieszczenie go w /server. Ale zignoruje cały kod w środku.

Po kodzie po stronie serwera należy umieścić kod, który ma być uruchamiany na serwerze, tj. Funkcje publikowania, oraz dane, które byłyby bardziej wrażliwe. & użytkownik nie powinien mieć dostępu.

+0

Jak udostępnić wspólne zmienne globalne w kodzie serwera i kodzie klienta? Czy nadal muszę używać 'MEteor.isServer {}' wewnątrz katalogu serwera? – KJW

+0

Możesz umieścić wspólny kod w folderze głównym projektu bez Meteor.isServer i bez Meteor.isClient, ten wspólny kod zostanie wykonany zarówno na kliencie, jak i na serwerze – Akshat

1

Myślę, że jest on wysyłany do klienta, chyba że znajduje się w folderze serwera. W odpowiedzi na jeden z komentarzy na temat współdzielenia zmiennych globalnych, używam tego wzorca. Utwórz tę samą globalną zmienną odpowiednio w folderach klienckich i serwerowych, a także poza tymi folderami dla dowolnego współużytkowanego kodu. Zainicjuj zmienną globalną w każdym miejscu, testując, czy już istnieje.

MyVar = typeof MyVar === 'undefined' ? {} : MyVar;

Następnie wystarczy umieścić metody, gdzie ich potrzebujesz. Na przykład, będę mieć obiekt użytkownika z metodą, która sprawdza, czy użytkownik jest autoryzowany. Opublikuję metodę raz na globalnym użytkowniku serwera, a raz na globalnym użytkowniku klienta. Metody są różne, ponieważ wersja serwera sprawdza właściwości niestandardowe obiektu użytkownika, które nie są dostępne na kliencie. Następnie w metodzie Meteor.methods, która działa zarówno na kliencie, jak i na serwerze, można wywołać metodę autoryzacji i wywoła różne metody w zależności od tego, czy działa ona na kliencie czy serwerze.

1

ja zadawałem sobie to samo pytanie dziś i natknęliśmy się na ten pakiet:

https://github.com/mquandalle/meteor-minifiers

Wygląda Meteor nie usuwa Meteor.isServer Blocks domyślnie. Zobacz tę dyskusję:

https://groups.google.com/forum/#!topic/meteor-talk/iHat47f6iGE

Nie używałem go już teraz, ale wygląda obiecująco.

Jeśli nie chcesz korzystać z dodatkowego pakietu, zalecamy użycie folderów client i server. Tylko pliki w folderze client są wysyłane do klienta.

Powiązane problemy