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.

Podobne dokumenty