Sails.js – Tworzenie kontrolera api w sails.js

W architekturze MVC (Model View Controller) kontroler to fragment kodu, który przyjmuje dane i konwertuje je odpowiednio dla widoku lub dla modelu. W wielkim uproszczeniu, można powiedzieć, że to klej łączący dwa pozostałe elementy 🙂 . Kontroler wysyła komunikaty oraz polecenia do modelu i widoku aby zmienić lub zaktualizować ich stan.

W poprzednim wpisie przedstawiłem sposób na połączenie aplikacji sails.js z bazą danych SQL. Już w tym przykładzie program wykorzystywał kontrolery. Jednak ponieważ były to domyślne mechanizmy działające w „bebechach” sailsa, nie było to dla nas widoczne,. Odpowiadały one za zaktualizowanie bazy danych po wysłaniu odpowiedniego requesta. W dzisiejszym poście pokażę jak w sails tworzyć własne kontrolery.

Tworzenie kontrolera api w sails.js

Czasami w api tworzonej aplikacji potrzebne jest jakieś niestandardowe zachowanie. Sails daje nam bardzo prosty sposób na poradzenie sobie z tym problemem. Jest to właśnie dodanie do api własnych kontrolerów.

Aby dodać własny kontroler, wystarczy w specjalnym module wygenerowanym dla naszego api przez sails, wyeksportować nową funkcję. Gdy wywołany zostanie request do naszego api, który w urlu po ukośniku będzie miał nazwę tej funkcji, zostanie ona uruchomiona. Przedstawię teraz na bardzo prostym przykładzie, jak to zrobić.

Zaznaczę jeszcze tylko, że pomimo, iż w tym przykładzie będę odwoływał się do api bezpośrednio z przeglądarki, w prawdzwiej aplikacji te wywołania miałyby miejsce w kodzie.

Czas przejść do przykładu. Na początek potrzebna będzie oczywiście nowa aplikacja sails. Zakładam, że masz już zainstalowane sails na swoim komputerze (jeżeli nie, możesz dowiedzieć się jak to zrobić w tym wpisie.).

W konsoli wchodzę do folderu, w którym chcę stworzyć nowy projekt sails i wpisuję:

Dzięki temu w aktualnej lokalizacji pojawi się nowy folder projektowy sailsNew. Kolejny krok to dodanie api, do którego chcę dodać własny kontroler. Aby to zrobić przechodzę do nowego katalogu i w konsoli wpisuję odpowiednią komendę:

Nie będę tu podłączał żadnej prawdziwej bazy danych, sails będzie zapisywał wszystko to co wyslę do api w plikach JSON. Na potrzeby prezentacji nada się idealnie.

Już w tej chwili można włączyć projekt, w głównym katalogu używając komendy:

Do mojego nowego api mogę odwołać się z przeglądarki wpisując adres:

Takie wywołanie zwróci wszystkie dane podpiętę pod api dogs. Oczywiście w tej chwili nic tam nie ma, więc zobaczymy tylko pustą tablicę.

Aby coś dodać do danych na szybko wystarczy użyć gotowego kontrolera create. Wystarczy w przeglądarce do adresu dopisać nazwę kontrolera i ewentualne argumenty. W taki sposób do danych doda się obiekt z polem name równym maja:

Ale to wszystko pokazywałem już wcześniej. Kolej na dodanie własnego kontrolera.

Koniec zabawy w konsoli, nadszedł czas aby odpalić edytory kodu. Aby dodać nowy kontroler, należy go wpisać do specjalnego modułu wygenerowanego przez sails dla api dogs. Każde dodane przez programistę api, będzie miało taki moduł. Aby je odnaleźć, z głównego folderu projektowego należy przejść do katalogu api a następnie do controllers. W tym ostatnim znajdziemy pliki zawierające moduły z kontrolerami dla naszych api. Po nazwie pliku odnajduję odpowiedni moduł (nazwa ta będzie zawierała nazwe api) i otwieram plik.

Jego zawartość powinna wyglądać mniej więcej tak:

Aby dodać nowy kontroler, wystarczy w eksportach wpisać nową funkcję. Jej nazwa to nazwa naszego kontrolera. Wywołanie tego kontrolera będzie równoznaczne z wywołaniem funkcji.

Oto prosty przykład, do eksportów dodaje proste logowanie wiadomości w konsoli:

module.exports = {
hello: function (req, res) {
console.log(„Hello world!”);
},
};

Teraz aby wywołać ten kontroler (należy pamiętać żeby najpierw zapisać projekt, i jeszcze raz uruchomić sails z konsoli), w adresie mojej przeglądarki wpiszę:

Sama przeglądarka nic nie pokaże ale jeśli zajrzymy do konsoli, w której uruchomiony jest proces sails:

sailsHello

Sukces 🙂 . Nowy kontroler gotowy. Nie jest zbyt efektowny, ale działa. Efekciarstwo zostawię sobie na kolejne posty.

Jeszcze dziś chcę jednak napisać o jednej rzeczy. Funkcja definiująca kontroler przyjmuje dwa argumenty. Są to obiekty zapytania (req) oraz odpowiedzi (res). Są one kluczowe ponieważ to dzięki nim nasz kontroler może robić to do co właściwie poiwnien, czyli komunikować widok z modelem.

Oto jak korzystając z obiektu req mogę wysłać odpowiedź do przeglądarki. Do mojego api dodam nowy kontroler – helloInBrowser:

Używając metody send obiektu res, przesyłam do przeglądarki (bardzo krótki) kod html. Jeżeli w przeglądarce otworzę ten adres:

Wyświetlony zostanie nowy nagłówek. Oczywiście, tak jak pisałem na początku, w prawdziwej aplikacji sprawa byłaby trochę bardziej rozbudowana. Raczej nie przesyłam bym kodu html w takiej formie i nie byłby on odbierany bezpośredni przez przeglądarkę a raczej przez kod kliencki, który już odpowiedni by go obsłużył. Bardziej rozbudowany przykład pokażę jednak następnym razem.

To wszystko na dziś. Te przykłady były dość proste i mam nadzieję, że udał mi się za ich pomocą pokazać jak w sails łatwo dodawać nowe kontrolery. Zachęcam do poeksperymentowania z sails na własną rękę. Do tego, jeśli chcesz być na bieżąco z postami na blogu zachęcam też do polubienia mojej strony na facebooku. Zawsze zamieszczam tam informacje o wszystkich nowościach. Jest to też dobre miejsce na kontakt ze mną. Na wszystkie pytania zawsze odpowiem 🙂 .

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *