Dedicat a en Enric, al Febrer de 2017 Tot està per fer i tot és possible

Inici | Passos | sqlite from node | Disseny | Fitxers Pere's | Links | End

Aplicació "llista de la compra"

GitHub, APP @ RSPI (mind External IP)

Amunt! Top Amunt!
Inici

Vull fer una aplicació per mòbil que em serveixi com "llista de la compra".

És clar que jo llegiré la llista des el meu mòbil al super, però pot ser que la Carme hi posi productes des el seu ordinador. Així, el client ens convé que sigui un browser.

Això ens indica que el servidor tindrà un "node".

El servidor ha de tenir una base de dades per mantenir la llista entre re-inicis del servidor, pero igual en tenim prou amb un fitxer de texte.

Això ens empeny cap un Linux i el Raspberry que tinc a casa sempre engegat.

Com que treballarem conjuntament amb en Enric, ens cal tenir el codi a github.

Detalls

Les operacion bàsiques que em calen son :


Amunt! Top Amunt!
Passos inicials i organitzacio
Actualitzem software
Verifiquem moduls
pi@odin:~/llisco $ npm ls --depth=0 ; display local modules llisco@1.0.0 /home/pi/llisco âââ body-parser@1.16.1 extraneous ; sudo npm remove body-parser âââ express@4.14.1 âââ express-session@1.15.1 extraneous ; means "not in package.json" âââ morgan@1.8.1 extraneous âââ sqlite3@3.1.8 extraneous npm ERR! extraneous: body-parser@1.16.1 /home/pi/llisco/node_modules/body-parser npm ERR! extraneous: express-session@1.15.1 /home/pi/llisco/node_modules/express-session npm ERR! extraneous: morgan@1.8.1 /home/pi/llisco/node_modules/morgan npm ERR! extraneous: sqlite3@3.1.8 /home/pi/llisco/node_modules/sqlite3 pi@odin:~/llisco $ npm ls -g --depth=0 ; display global modules, under /usr/lib/node_modules /usr/lib âââ node@0.0.0 âââ npm@4.3.0

Amunt! Top Amunt!
BBDD : sqlite
sqlite commands

See dot commands

Accés a sqlite des nodejs

Instalem el package :

npm install sqlite3 --build-from-source --save ; skip searching for pre-compiled binaries, and force a build from source

Comprovem que funciona :

pi@odin:~/llisco $ cat 8_sqlite_4_prova_lectura_des_node.js var sqlite3 = require('sqlite3').verbose(); var file = "/home/pi/llisco/my_bbdd/llista_de_la_compra.db"; var db = new sqlite3.Database(file); db.all("SELECT numid,producte FROM tbl_llisco", function(err, rows) { rows.forEach(function (row) { console.log( row.numid, row.producte ); }) }); db.close();

El resultat és :

pi@odin:~/llisco $ node 8_sqlite_4_prova_lectura_des_node.js 1 '2 Kg de mandarines' 2 '1 pot de guacamole'
sqlite API

w3resource :

sqlite3.verbose()

Sets the execution mode to verbose to produce long stack traces. There is no way to reset this.

Database#close([callback])

Closes the database. If provided, the callback function will be called when the database was closed successfully or when an error occurred.


Amunt! Top Amunt!
Disseny
How to store user data in client page

Les nostres dades son en una base de dades amb un index.

Si el client ha de poder esborrar un element de la llista des el seu browser "client", és que li hem de passar el index junt amb el texte.

On guardar-lo ? És millor usar atributs data-XXX en els tags html. Per més informació, busca HTML5 custom data attributes

Closures

El scope és fonamental. Les funcions en javascript que fan referencia a variables independents són closures. Cada closure té un scope, on estan definides les variables que s'usen localment. La execució de la funció es fa en el scope en que s'ha creat. És a dir que aquestes funcions recorden l'entorn en que es van crear.

URL

selectors jQuery
Client / Server syntax

El $.ajax(get....) es una funcio jquery que acaba creant un http get

El client podria ser una invocacio de curl des de la command line

El app.get () es una ruta express que es cridada com a efecte de l'arribada d'un http get

La convenció {req,res,next} de la crida és parafernàlia express, o connect si vols ser més precís

req, res, next

Call next() to invoke the next middleware in the stack

The following callback is executed for requests to /secret whether using GET, POST, PUT, DELETE, or any other HTTP request method:

app.all( '/secret', function ( req, res, next ) { console.log( 'Accessing the secret section ...' ) next() // pass control to the next handler });

Amunt! Top Amunt!
Fitxers del projecte
0_engega_app_llista_compra.sh - shell per engegar el servidor i deixar-lo en background 1_llisco.js - codi de la aplicacio "llista de la compra" 8_sqlite_1_crear_taula.py - crear la taula (buida) 8_sqlite_2_omplir_taula.sh - omplir la taula 8_sqlite_3_mostrar_contingut.py - mostrar el contingut de la taula 8_sqlite_4_prova_lectura_des_node.js - llegir la taula des nodejs i posar les dades a un html 9_comandes_git.txt - resum de comandes per manegar el repositori compartit a github .gitignore - fitxers que hi ha aqui que no es guarden al repositori package.json - packages que li calen al projecte README.ms - project description for the external world

Amunt! Top Amunt!
La del Pere

Pere's project - quina canya !

Instalació RSPI
pi@odin:~/pere/llista_compra $ sudo git clone https://github.com/palbcn/shoplist.git Cloning into 'shoplist'... remote: Counting objects: 49, done. remote: Compressing objects: 100% (30/30), done. remote: Total 49 (delta 20), reused 45 (delta 16), pack-reused 0 Unpacking objects: 100% (49/49), done. Checking connectivity... done. pi@odin:~/pere/llista_compra $ cd shoplist/ pi@odin:~/pere/llista_compra/shoplist $ sudo npm install pi@odin:~/pere/llista_compra/shoplist $ npm ls --depth=0 shoplist@1.0.0 /home/pi/pere/llista_compra/shoplist âââ body-parser@1.16.1 âââ bower@1.8.0 âââ browser-sync@2.18.8 âââ cookie-parser@1.4.3 âââ express@4.14.1 âââ express-session@1.15.1 âââ morgan@1.8.1 âââ passport@0.3.2 âââ UNMET DEPENDENCY sqlite3@~3.1.8 npm ERR! missing: sqlite3@~3.1.8, required by shoplist@1.0.0
Instalació W500

Install git for windows, read a book, get a tool

Get code :

C:\sebas\miscosas\node\pere> git clone https://github.com/palbcn/shoplist.git Cloning into 'shoplist'... remote: Counting objects: 49, done. remote: Compressing objects: 100% (30/30), done. remote: Total 49 (delta 20), reused 45 (delta 16), pack-reused 0 Unpacking objects: 100% (49/49), done.

Install modules :

C:\sebas\miscosas\node\pere> npm install + nom update npm install jquery npm install -g bower // install global npm install body-parser --save // update "package.json"

Run Pere's code :

C:\sebas\miscosas\node\pere\shoplist> node server Shop List Server is now open for e-business at localhost: 60784

My fixes :

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> <link href="//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css" rel="stylesheet">

Amunt! Top Amunt!
Links of the project

Ep ! Valid HTML 4.01!   Valid CSS! Escriu-me !
Updated 20170311 (a)  
Uf !