Laboratorium 7 Node.js, mongoose, express
Transkrypt
Laboratorium 7 Node.js, mongoose, express
Laboratorium 7 Node.js, mongoose, express-generator, własne moduły – cz. 3 Zadanie 0 – ostatnie zadanie z laboratorium 6, proste API na bazie mongoose Korzystając z przykładu z wykładu na bazie kolekcji z zadania 1 tworzymy proste API. Dokumenty w kolekcji powinny zawierać informację o użytkowniku (jako hasło przechowujemy skrót hasła, np. sha1). { "_id":"570adc5972104b451fd0beae", "username":"jann", "password":"ac1ab23d6288711be64a25bf13432baf1e60b2bd", "last":"Kowalski", "first":"Januszek", "__v":0 } Będzie potrzebny moduł body-parser do obsługi formatu JSON i metody POST. Hasło użytkownika można otrzymać korzystając z funkcji skrótu, np. md5 czy sha1, np.: userHash = md5( user.password ); Zasób (URI) POST api/users api/users/:id GET tworzenie nowego lista wszystkich użytkownika użytkowników ––––– PUT ––––– DELETE ––––– użytkownik o ID aktualizacja usunięcie użytkownika o ID użytkownika o ID Dodać informację na stronie głównej (statyczna strona) z opisem API, jak powyżej. Zadanie 1 Przenieść funkcjonalność zadania 0 do pełnego szablonu aplikacji wygenerowanego z express-generator. W pliku głównym aplikacji ma być fragment adresu dostępu do wszystkich API w aplikacji (tutaj '/api'). Do obsługi jednej/każdej kolekcji w bazie wykorzystać osobny moduł. Zasób (URI) POST api/users api/users/:id GET tworzenie nowego lista wszystkich użytkownika użytkowników ––––– PUT ––––– DELETE ––––– użytkownik i ID aktualizacja usunięcie użytkownika o ID użytkownika o ID Dodać informację na stronie głównej (statyczna strona) z opisem API, jak powyżej. Adresy ULR udostępnionego API umieścić w zmiennych, których wartości wyświetlimy w szablonie. Szablony powinny być przynajmniej dwa. 1. Ogólny, odpowiadający za wygląd całej strony (nagłówek, stopka, menu, polubienia z FB albo reklamy :) ) 2. Częściowy, odpowiadający za wyświetlenie konkretnego elementu, np. opisu API. Zadanie 2 Stworzyć widok (z użyciem szablonu), w którym wyświetlimy listę użytkowników (adres: /users). Przy każdej pozycji listy proszę dodać przycisk/link pozwalający na usunięcie danego użytkownika z bazy. Zadanie 3 Utworzyć kolekcję samochodów, w której każdy dokument zawiera cztery pola (nie licząc pól _id oraz __v): { "nazwa":"Toyota Avensis 1,6D", "wersja":"Sedan / 4dr", "liczba":2, "rocznik":2014 } Pod adresem /api/cars zrobić analogiczne API jak w zadaniu 1 z kolekcją użytkowników. Zrobić od razu widok (adres /cars) z prostą listą samochodów w kolekcji. Zadanie 4 Proszę zrobić powiązanie samochodów z użytkownikami. Każdy samochód MUSI mieć przypisanego użytkownika. Jeden użytkownik może mieć 0..* samochodów. Jak to zrobić? • Może być tablica id samochodów w użytkownikach • Może być id użytkownika dla każdego samochodu • Może być osobna kolekcja łącząca id samochodu i id użytkownika • Można do dokumentu użytkowników dodać wewnątrz tablicę dokumentów z samochodami i przechowywać wszystko w jednej kolekcji... Metoda dowolna – przy liście użytkowników pod adresem /users ma się wyświetlać lista użytkowników razem z ich samochodami... Zadanie 5 Dodać formularz z metodą POST, który będzie dodawał użytkowników do naszej bazy. Zadanie 6 Dodać funkcjonalność, która pozwala zmienić hasło, pod warunkiem, że w formularzu podamy prawidłowo poprzednią wartość hasła. Zadanie 7 Wykorzystując pakiet passport: https://www.npmjs.com/package/passport http://mherman.org/blog/2015/01/31/local-authentication-with-passport-and-express-4/ zrobić działające uwierzytelnienie tworząc API: • /register – rejestracja, tworzenie konta • /login – logowanie • /logout – wylogowanie • /ping – api do testów :)