In questo esempio vi mostrerò una semplice applicazione web fatta in NodeJS.
- Installare NodeJS & NPM, scegliete la versione consigliata.
- Per "giocare" con questo progetto e fare le vostre prove dovete clonare questo repository. Potete clonarlo con GitKraken o con la bash di git digitando
git clone https://github.com/CiccioTecchio/ExampleNodeJS.git
. - Una volta clonato recarsi sulla root del progetto(la cartella ExampleNodeJS) con la bash di node e digitate il comando
npm i
per scaricare le dipendenze con npm. - Per quanto riguarda la IDE da utilizzare io ho usato Visual Studio Code ma potete usare anche WebStorm(per gli studenti è gratis) oppure potete anche semplicemente aprire i file con un blocco note.
Questa applicazione ha lo scopo di farvi capire come avvengono le chiamate fra client e server e come quest'ultimo comunichi con il db.
L'app è molto semplice è una pagina web che presenta due campi di testo username, password e due bottoni signin login.
- compilando i campi e cliccando il tasto login parte una chiamata AJAX(fatta in jquery) che chiama il servizio esposto da node all'indirizzo /users/login per effettuare la login. Questo servizio prende i dati inviati dall'utente e li cerca nel db se li trova restituisce status 200 altrimenti status 404.
- compilando i campi cliccando il tasto signin parte una chiamata AJAX(fatta in jquery) che chiama il servizio esposto da node all'indirizzo /users/signin per effettuare la registrazione di un utente. Questo servizio prende i dati inviati dall'utente e se non è già presente lo inserisce e restituisce status 200 altrimenti status 409
è il nostro "main" qui vengo fatti i require(sarebbe l'equivalente dell'import di Java) delle dipendenze che abbiamo scaricato.
let usersRouter = require('./routes/usersCNT');
Il codice soprastante definisce la variabile che utilizzeremo per il routing dei servizi di user.
Di seguito andiamo ad indicare dove si troveranno i file .html che dovrà caricare il server, questi file sono contenuti nella cartella public.
app.use(express.static(path.join(__dirname, 'public')));
Qui andiamo ad usere i router che abbiamo definito precedentemente
app.use('/users', usersRouter);
questo vuol dire che sotto l'indirizzo "/users" ci saranno tutti i servizi relativi agli users.
il file singleton/singleton.js rappresenta una istanza della connessione al db.
in model/User.js abbiamo il model che rappresenta l'entita del nostro db.
questo è il nostro "controller" qui effettueremo le operazioni di signin e login.
- login
router.post('/login', function(req, res){
let username = req.body.username;
let pswd = req.body.password;
user.findOne({where: {"username":username, "password":pswd} })
.then( doc => {if(doc===null)res.sendStatus(404)
.end({"message": "utente non trovato"});else res.status(200).send(doc)});
});
Esponiamo un servizio accessibile tramite una chiamata POST sull' indirizzo http://localhost:3000/users/login la funzione ha due parametri req è ciò che ci viene inviato dal client tramite la AJAX e res che è il risultato che noi manderemo al client. Facciamo la query con il metodo user.findOne e diciamo che spediremo il json chiamato doc se il suo contenuto non è null altrimenti spediremo un json che contiene un messaggio di errore e modificheremo lo stato http a 404
- signin funziona come login
l'interfaccia web che interagisce con il server si trova nella cartella /public
qui troveremo index.html
che è l'unica pagina web del nostra applicazione. Quindi se si vuole creare una app web con un template fatto in html basta aggiungere il template sotto la cartella /public
.
Per quanto riguarda il testing framework Mocha insieme al TDD Chai permette utilizzare il meccanismo delle asserzioni in Node.js e infine Istanbul che permette di visualizzare varie metriche come line coverage, branch coverage, function coverage e statement coverage.
La classe per il test delle richieste di UserCNT è UserCNT.test.js e si trova nella cartella server/test.
Il file di configurazione per la test coverage è .nycrc
.
Nella cartella test è contenuto anche il file travis.sql
, questo file è il db di test da eseguire su Travis.
Con la keyword describe
andiamo a raggruppare più casi di test, con la keyword it
andiamo a descrivere il caso di test.
Lanciando il comando npm test
possiamo vedere i casi di test se sono andiati a buon fine e quanto il nostro codice è coperto dal test.
Questa app è stata integrata con Travis.ci e Coveralls per vedere la configurazione consultare il file travis.yml
.
L'app è stata integrata con ESLint che si occupare di revisionare e aggiustare la forma del codice. Il file di configurazione è .eslint
qui viene definito lo standard da seguire per la scrittura del codice. Dalla cartella server
digitando il comando ./node_modules/.bin/eslint app.js routes/** test/**.js
viene mostrato il numero di errori(ovvero le linee che non rispettano lo standard) di app.js, tutti i file sotto routes e tutti i file .js sotto test. Per risolvere alcuni di questi problemi basta lanciare il comando ./node_modules/.bin/eslint --fix app.js routes/** test/**.js
- Avviare XAMPP(o una sua alternativa) e importare lo schema
Example_users.sql
- Dalla bash di node andate sulla root del progetto e digitare
bash cd server node app.js
- Da questo momento il server è avviato e all'indirizzo http://localhost:3000/ potete trovare la home del sito.