Vazco Bootcamp

Szkolenie Meteor 2

Maciej Stasiełuk, Vazco.eu

12.08.15

Plan szkolenia

  1. Budowa rdzenia naszej aplikacji
    • FlowRouter / BlazeLayout / Accounts
  2. Publikowanie danych
    • Autopublish
    • Publikowanie i subskrybowanie
  3. Aktualizacja danych
    • Insecure
    • Reguły allow i deny
  4. Metody
    • Własne metody
    • Optimistic UI
  5. Walidacja
    • Check
    • Obsługa błędów

Budowa aplikacji
SecretNotes

  • Szybkie prototypowanie aplikacji:
    • FlowRouter
    • BlazeLayout
    • Grafika: Bootstrap
    • System kont
    • Kolekcja notatek
    • Dodawanie nowej notatki
    • Listing notatek
    • Widok notatki

Instalacja wybranych paczek

meteor add kadira:flow-router kadira:blaze-layout
meteor add accounts-password accounts-ui
meteor add twbs:bootstrap

Dla dociekliwych:

Publikowanie danych

  • Czym jest autopublish?
  • Architektura publikacji i subskrypcji
  • Tworzenie własnej publikacji
  • Kiedy nasza publikacja jest gotowa?
  • Publikowanie tylko wybranym użytkownikom
  • Publikowanie danych z wielu kolekcji na raz

Paczka autopublish

  • Dodawana domyślnie do nowych projektów
  • Wysyła do MiniMongo CAŁĄ zawartość prawdziwej bazy danych MongoDB
  • Usuwanie komendą:
$ meteor remove autopublish

Publikacje i subskrypcje 

*nie mylić z "pub/sub pattern"

 

Po stronie serwera: publikujemy zbiór dokumentów.

 

Po stronie klienta: subskrybujemy żądaną publikację i otrzymujemy zbiór dokumentów.

Kodujemy:

  • Wyłączamy autopublish
  • Tworzymy publikacje:
    • listy notatek
    • konkretnej notatki
  • Tworzymy subskrypcje:
    • "luzem"
    • w routerze
    • w templatkach
  • Wyświetlamy napis loading...
  • Publikowanie w zależności od parametrów
  • Publikowanie tylko niektórych pól
  • Publikowanie z wielu kolekcji na raz

Dla dociekliwych:

Bezpieczna aktualizacja danych w Mongo

  • Czym jest insecure?
  • Reguły allow/deny na kolekcjach
  • Przykłady weryfikacji poprawności danych

Paczka insecure

  • Dodawana domyślnie do nowych projektów
  • Pozwala dowolnie modyfikować klientowi zawartość prawdziwej bazy danych - można dodawać, usuwać i modyfikować treść dowolnie
  • Usuwanie komendą:
$ meteor remove insecure

Reguły allow/deny

SomeCollection.allow({
  insert: function (userId, doc) {
    return true;
  },
  update: function (userId, doc, fields, modifier) {
    return true;
  },
  remove: function (userId, doc) {
    return true;
  }
});

SomeCollection.deny({
  insert: function (userId, doc) {
    return false;
  },
  update: function (userId, doc, fields, modifier) {
    return false;
  },
  remove: function (userId, doc) {
    return false;
  }
});

Kodujemy:

  • Wyłączamy insecure
  • Tworzymy regułki dla kolekcji notatek:
    • Dodawać mogą tylko zalogowani
    • Edytować może tylko autor
    • Nikt nie może usuwać

Dla dociekliwych:

Metody

  1. Definiowanie metod
  2. Wywoływanie metod
  3. Symulacje i Optimistic UI
  4. Zalety/wady w stosunku do operacji
    bezpośrednio na kolekcjach
Meteor.methods({
  sayHello: function (name, surname) {
    return 'Hello ' + name + '' + surname;
  }
});
Meteor.call('sayHello', 'Maciek', 'Stasieluk', function (err, result) {
    console.log(result);
});

Definiowanie metody

Wywoływanie metody

Meteor.apply('sayHello', ['Maciek', 'Stasieluk'], function (err, result) {
    console.log(result);
});

Optimistic UI / Latency Compensation

Kodujemy

  • Przenosimy dodawanie nowej notatki do metody

Dla dociekliwych:

Walidacja danych

  1. NIGDY NIE UFAJ DANYM UŻYTKOWNIKA
  2. Paczka Check
  3. Zastosowanie w wielu miejscach, najbardziej przydatne w publikacjach i metodach
  4. Obsługa błędów
  5. Rzucanie własnych błędów

Kodujemy

  • Dodajmy audit-argument-checks
  • Weryfikujemy parametry w publikacjach oraz metodzie dodawania nowej notatki

Dla dociekliwych:

Zadanie domowe

  1. Listing tylko swoich notatek
  2. Edycja własnych notatek
  3. Dodanie hasła do notatek.
    Aby odczytać notatkę należy wpisać sekretne hasło w widoku notatki. Do czasu podania zgodnego hasła nikt nie powinien być w stanie odczytać zawartości pola content. Dopiero ta funkcjonalność sprawia że nazwa SecretNotes nabiera sensu :)

Pomysły na funkcjonalności które można wdrożyć samemu i rozbudować projekt:

Dzięki za udział!

Pytania?

VazcoBootcamp: Szkolenie II

By Maciej

VazcoBootcamp: Szkolenie II

  • 952