2016-01-29 15 views
6

Kilka pytań, na które nie mogę znaleźć odpowiedzi w dokumentacji.Wpisy Strongloop Nie znaleziono wielu metod pomocniczych.

Próbuję uzyskać strukturę tak:

Node: 
    id: '1sdf12asd123', 
    name: 'node1', 
    history: 
     [ ts: 234234234234, 
     data: { 'foo': 'bar' } 
     ], 
     ... 

więc każdy indywidualny węzeł ma wiele elementów historii. I chcę mieć możliwość dodania do tego nowych danych, bez nadpisywania czegokolwiek.

Teraz nie chcę przechowywać wszystko pod każdym węźle, ale raczej w oddzielnym dokumencie, więc myślę embedsMany byłby odpowiedni do tego:

{ 
    "name": "Node", 
    "plural": "Nodes", 
    "base": "PersistedModel", 
    "idInjection": true, 
    "options": { 
    "validateUpsert": true 
    }, 
    "properties": { 
    "name": { 
     "type": "string" 
    } 
    }, 
    "validations": [], 
    "relations": { 
    "history": { 
     "type": "embedsMany", 
     "model": "History", 
     "foreignKey": "HistoryId" 
    } 
    }, 
    "acls": [], 
    "methods": {} 
} 

Więc historia będzie po prostu:

{ 
    "name": "History", 
    "base": "PersistedModel", 
    "idInjection": true, 
    "properties": { 
    "ts": { 
     "type": "Date" 
    }, 
    "data": { 
     "type": "Object" 
    } 
    }, 
    "validations": [], 
    "relations": { 
    "node": { 
     "type": "belongsTo", 
     "model": "Node", 
     "foreignKey": "NodeId" 
    } 
    }, 
    "acls": [], 
    "methods": {} 
} 

Nie jestem pewien, czy część foreignKey jest właściwa, ale wypróbowałem wiele różnych kombinacji, a ta wydaje się logiczna.

Model historii nie jest publiczny, więc nie jest wyeksponowany jako punkt końcowy. I chcę wykorzystać relacje tak bardzo, jak to możliwe, zamiast mieć oddzielny punkt końcowy.

Głównym problemem tutaj jest chciałbym użyć Nodes.history.add() jak opisano here.

Ale próbowałem o różnych metodach od Remote methods do Operation Hooks, ale nie mogę znaleźć wymienionych metod pomocnika. Nie ma żadnego przykładu kodu, który można by znaleźć na ten temat.

Częściowo myślę, że dzieje się tak dlatego, że dokumentacja jest czasami niezbyt wyraźna lub zakłada pewien stopień wiedzy na temat działania innych frameworków API. I przeczytałem o każdej stronie dokumentacji, którą można znaleźć. (Jednym z przykładów jest Core concepts stronę linki do nieaktualnych Model hooks strony).

Co chciałbym wiedzieć:

  1. Czy pomysł wykorzystania .add() prawo do pchania danych na model i ma pętli zwrotnej zarządzaj tym miejscem, w którym powinien on być przechowywany, więc gdy zapytam węzeł, otrzymam wszystkie elementy history, chyba że zapobiegnę temu po stronie serwera (ponieważ nie chciałbym, aby każde żądanie dla samych danych węzła było potrzebne,
  2. dobrym pomysłem jest utworzenie oddzielnego dokumentu dla każdego elementu historii, z danym węzłem, lub lepszym, aby utworzyć jeden element historii na węzeł i zapisać histo ry w nich? Głównym problemem dla mnie jest, Jak mogę push danych, bez nadpisywania czegokolwiek, i być może z wykorzystaniem timeStamp jako klucz?
  3. Czy model History musi wiedzieć o ich związku z Nodes z BelongsTo, czy może to być niepomny i nadal ma w sobie każdy element historii?

Odpowiedz

1

Jeśli dobrze rozumiem Twój problem, możesz zamiast tego zrobić: NodehasManyHistory.Następnie wykorzystać wszystkie metody wygenerowane z zależnością:

Aby utworzyć nową historię za pomocą relacji

POST api/Node/{NodeId}/Histories/ 

powinien być w stanie utworzyć wiele instancji Historia z pojedynczego żądania POST pisząc danych JSON odpowiednio

{ 
    { 
     ts: 26283829879 
    }, 
    { 
     ts: 5335329923 
    } 
} 

aby uzyskać pojedyncze historie z węzła

GET api/Node/{NodeId}/Histories/{HistoryId}/ 

Można również pobrać wszystkie historie z węzła, edytować dowolną historię danego węzła itp.

Czy to pomocne?

Zobacz dokumentację StrongLoop dla HasMany relations.

+0

Potrzebuję być w stanie '.add' multiple historyItems na raz. – TrySpace

+0

Nic nie stoi na przeszkodzie, aby to zrobić. Wierzę, że to natywnie obsługiwane przez model Persisted. Zobacz https://apidocs.strongloop.com/loopback/#persistedmodel-create * Opcjonalny argument danych. Może to być pojedyncza instancja modelu lub tablica instancji. * Zmieniono mój post, zobacz, czy to rozwiąże problem. – Overdrivr

+0

Problem z tym, że nie chcę "tworzyć" 'węzła', to już jest, więc muszę go użyć w' findById', a następnie dodać coś ... – TrySpace

Powiązane problemy