Con l'approccio modulare visto fino ad ora, basta aggiungere due ulteriori moduli per
- la gestione delle rotte (richieste) relative alle gestione dei libri (lista, ricerca,rimozione ...) in routes/libri.js
- implementazione logica di business relativa alla gestione dei libri in servizi/serviziLibri.js
if (!session.utente)
ul(class='nav nav-pils')
li(role='presentation')
a(href='/utente/login') Login
li(role='presentation')
a(href='/utente/registrazione') Registrati!
else
ul(class='nav nav-pils')
li(role='presentation')
a(href='/utente/logout') Logout
li(role='presentation')
a(href='/libri') Lista Libri
li(role='presentation')
a(href='/libri/cerca') Cerca Libro
if (session.utente.profilo === 'admin')
li(role='presentation')
a(href='/libri/nuovo') Nuovo Libro
Nel caso di utente che accede con il profilo semplice, attiviamo nel menu le rotte (link di richiesta)- /libri per visualizzare la lista dei libri
- /libri/cerca per visualizzare un form di ricerca libro
- /libri/nuovo per visualizzare un form di inserimento di un nuovo libro
var libri = require('./routes/libri');
...
app.use('/libri', libri);
Il modulo libri fornisce, per ora, la gestione della rotta radice /
var express = require('express');
var router = express.Router();
var serviziLibri = require('../servizi/serviziLibri');
router.route('/')
.get(function(request,response) {
var libri = serviziLibri.listaLibri();
response.render('listalibri', {libri : libri});
});
module.exports = router;
e quindi la lista dei libri sarà visualizzata a seguito della richiesta all'indirizzo /libri utilizzando la nuova vista presente in /views/listalibri.jade
extends ./layout.jade
block titolo
title Lista Libri
block testata
h1.text-info Lista Libri!
block contenuti-principali
if (libri)
table(class='table table-striped table-bordered')
thead
tr
th Codice
th Titolo
th Autore
each libro in libri
tr
td #{libro.codiceisbn}
td #{libro.titolo}
td #{libro.autore}
Il modulo serviziLibri sarà così implementato, sempre utilizzando la tecnica delle funzioni definite ed eseguite immediatamente
module.exports = (function(){
var libri = [
{
titolo : 'Il signore degli anelli',
codiceisbn: 'DRF00223Z',
autore: 'John Ronald Reuel Tolkjen'
},
{
titolo : 'Guerra e pace',
codiceisbn: 'FTGR44E3',
autore: 'Lev Tolstoj'
},
{
titolo : 'Javascript the good parts',
codiceisbn: 'ZZ3423DR665',
autore: 'Douglas Crockford'
}
];
var listaLibri = function() {
return libri;
};
return {
listaLibri : listaLibri
};
})();
Come si può osservare, continuiamo ancora ad utilizzare una base dati in memoria, tra qualche post sostituiremo il codice presente il questo modulo con quello relativo alla interazione con una base dati.Nel prossimo post, vedremo come implementare la ricerca, ma ormai dovrebbe essere chiaro, spero, come sia strutturato il codice.
Su https://whispering-peak-1284.herokuapp.com/ potete testare le funzionalità appena implementate.
Come al solito, ho aggiornato su github il progetto installato su heroku, in modo che possiate avere sempre tutto il codice a disposizione, in questo post è spiegato come utilizzare github.
Dopo aver fatto il pull del progetto, ricordatevi di eseguire, se non lo avete mai fatto, npm install nella cartella di progetto;
Se volete eseguire il programma in locale digitate node app.js e puntate il browser all'indirizzo http://localhost:5000.
Alla prox
Ivan
Nessun commento:
Posta un commento