Laboratorium 2
Transkrypt
Laboratorium 2
Laboratorium 2 express-generator, moduły, mongoose Zadanie 1 Instalujemy sobie express-generator, najlepiej zrobić to globalnie (uruchamianym programem będzie express). Warto wyświetlić sobie pomoc, zobaczyć jakie mamy opcje: express -h (to samo mamy na stronie: http://expressjs.com/en/starter/generator.html). Zadanie 2 Korzystając z express-generator tworzymy aplikację lab02 wykorzystującą system szablonów Pug. Instalujemy potrzebne zależności (npm install), uruchamiamy aplikację. Testujemy wszystkie dostępne adresy URL czyli aż całe dwa: http://localhost:3000/ – tutaj jest wykorzystany silnik szablonów (będzie za tydzień) http://localhost:3000/users Proszę: • zmienić numer portu, na którym uruchamiana jest aplikacja na 5000, • uruchomić aplikację poleceniem nodemon (może być potrzeba zainstalowania tego pakietu globalnie w systemie jeśli jeszcze tego nie zrobiliśmy) • w obu modułach odpowiedzialnych za rooting (index.js, users.js) dodajemy funkcję zwracającą napis, odpowiednio: 'Hello from index', oraz 'Hello from users'. Obie funkcje lokalnie, wewnątrz modułu, mają działać na adresie '/hello'. Testujemy działanie. Zadanie 3 Do katalogu routes dodajemy dodatkowy moduł students.js odpowiedzialny za prezentacje informacji o studentach. Moduł powinien obsługiwać trzy adresy: • /list – wyświetlający informacje o studentach (metoda GET) • /list/:id – wyświetla dane jednego studenta o podanym id (metoda GET) • /add – dodający jednego studenta do tablicy (metoda POST protokołu HTTP), do przetestowania przyda się klient REST, np. Postman. Wszystkie powyższe trasy powinny działać dla bazowego adresu '/students'. Do wyświetlania listy studentów i dodawania kolejnych można na początek użyć zwykłej tablicy JavaScript, np.: var students = [ {"id": 1, "imie":"Jan", "nazwisko":"Kowalski"}, {"id": 2, "imie":"Zofia", "nazwisko":"Zalewska"}, {"id": 3, "imie":"Tadeusz", "nazwisko":"Mostowski"}, {"id": 4, "imie":"Inga", "nazwisko":"Baran"} ]; Testujemy działanie wszystkich 3 adresów. Zadanie 4.1 – proste połączenie do bazy korzystając z mongoose Instalujemy w aplikacji pakiet mongoose. Tworzymy dodatkowy moduł db.js (może być w dowolnym katalogu, nie jest związany z rootingiem tylko z połączeniem do bazy danych). W module db.js tworzymy schemat obiektu do pakietu mongoose i łączymy się z mongodb na localhost, kod poniżej: var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/test', function(err) { if(err) { console.log('błąd połączenia', err); } else { console.log('połączenie udane'); } }); // schemat dokumentu opisującego studenta w kolekcji test var studentSchema = new mongoose.Schema({ name: String, surname: String }); // eksportowanie modelu student, który będziemy wykorzystywać do zbutowania API module.exports = mongoose.model('student', studentSchema); Można przetestować czy połączenie działa uruchamiając aplikację. Zadanie 4.2 – wykorzystanie utworzonego schematu do stworzenia prostego API Do wcześniej utworzonego modułu students.js dołączamy utworzony powyżej model i dołączamy dwie operacje na adresie '/students' dla metod GET i POST: var Student = require('./db'); // ścieżka do modułu zależna od tego, gdzie go umieściliśmy /* GET /students - lista studentów */ router.get('/', function(req, res, next) { Student.find(function (err, students) { if (err) return next(err); res.json(students); }); }); /* POST /students - dodawanie studenta */ router.post('/', function(req, res, next) { Student.create(req.body, function (err, stud) { if (err) return next(err); res.json(stud); }); }); Proszę przetestować działanie powyższego kodu. Korzystając klienta REST, np. z Postman, trzeba wysłać metodą POST pod adres '/students' obiekt w formacie JSON zawierający pola name i surname (jak określono w schemacie w 4.1). Przesłany obiekt powinien się dodać do bazy i być dostępny pod adresem '/students' dla metody GET. Korzystając z dokumentacji mongoose (http://mongoosejs.com/docs/models.html) proszę samodzielnie: • dodać dla metody GET obsługę wyświetlania wybranego studenta podając w adresie konkretne id, np. http://localhost:5000/students/58b38ee6d59cc0364837c36e • dodać dla metody PUT obsługę aktualizacji wybranego studenta podając w adresie konkretne id, Testujemy czy całe API działa.