martedì, gennaio 20, 2015

Biblioteca: funzionalità di ricerca

Anche questa funzionalità s'implementa abbastanza in fretta all'interno dell'architettura proposta.

Si aggiunge una rotta opportuna nel file routes/libri.js
 router.route('/cerca')  
      .get(function(request, response) {  
           response.render('cercalibro');  
      })  
      .post(validatoreRicercaLibro, function(request, response) {  
           if (!request.form.isValid) {  
                messages = request.form.errors;  
                response.render('cercalibro', {messages: messages});  
           }  
           else {  
                var libri = serviziLibri.cercaLibri(request.body.chiave);  
                response.render('listalibri', {libri : libri});  
           }  
      });  
Il che significa che la richiesta GET a /libri/cerca fa visualizzare la pagina cercalibro,jade contentente il form di ricerca, mentre una richiesta POST allo stesso indirizzo scatena l'invocazione del servizio di ricerca e fa visualizzare la pagina listalibri,jade valorizzando opportunamente l'oggetto {libri: libri} utilizzato nel template jade.

La pagina cercalibro.jade contiene il form di ricerca
 extends ./layout.jade  
   
 block titolo  
  title Cerca Libro  
   
 block testata  
  h1.text-info Cerca Libro  
   
 block contenuti-principali  
  form(method='post', action='cerca')  
   div.form-group  
    label(for='chiave') Chiave ricerca  
    input(type='text', class='form-control' name='chiave', placeholder='chiave')  
   button(type='submit' class='btn btn-default') Cerca  
Il modulo servizi/serviziLibri esporrà il nuovo metodo per restituire i libri contenenti la chiave di ricerca nel proprio titolo
     ...  
   
 var cercaLibri = function(chiave) {  
    return libri.filter(function(libro) {  
       return (libro.titolo.toLowerCase().search(chiave.toLowerCase()) != -1);  
    });  
 };  
 return {  
    listaLibri : listaLibri,  
    elimina: elimina,  
    salvaLibro: salvaLibro,  
    cercaLibri: cercaLibri  
 };  
La funzionalità è implementata usando il metodo filter degli array e il metodi toLowerCase e search delle stringhe.

All'indirizzo https://whispering-peak-1284.herokuapp.com/ è presente l'applicativo aggiornato.

Con questo post, abbiamo completato l'implementazione di tutte le funzionalità: non resta che concentrarci sullo strato di persistenza su base dati.

Ho aggiornato su github il progetto installato su heroku, in modo che possiate avere tutto il codice a disposizione, in questo post è spiegato come utilizzare github.

Dopo aver fatto il pull del progetto, ricordatevi di eseguire npm install (se non lo avete mai fatto) nella cartella di progetto per installare le dipendenze aggiuntive: 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