Node.JS Raspberry Pi (RPi) 2015/05/08 Juan V. Capella Contenido armpower.blogs.upv.es ● Objetivo ● Introducción ● Operadores ● Tipos de datos ● Funciones ● Networking 2 Objetivo ● Aprender a instalar Node.js ● Conocer Node.js y qué nos ofrece ● Introducirse en la programación en javascript con la Raspberry Pi armpower.blogs.upv.es 3 Introducción ● ● Plataforma de ejecución de aplicaciones para ejecutar scripts escritos en JavaScript sin usar ningún navegador Principal objetivo ● Facilitar el desarrollo de aplicacones centradas en E/S, como son las aplicaciones en red ● Permite construir aplicaciones que se adaptan fácilmente a entornos en los que la carga de transacciones aumenta – ● Aplicaciones escalables http://nodejs.org armpower.blogs.upv.es 4 Instalar Node.JS en la Raspberry Pi ● sudo mkdir /opt/node ● wget http://nodejs.org/dist/v0.10.17/node-v0.10.17linux-arm-pi.tar.gz ● tar xvzf node-v0.10.17-linux-arm-pi.tar.gz ● sudo cp -r node-v0.10.17-linux-arm-pi/* /opt/node ● node -v armpower.blogs.upv.es 5 JavaScript ● Lenguaje de programación orientado a entornos web ● No es Java ● Orientado a entornos web. Esto no quiere decir que su uso sea exclusivo para ese ámbito ● ● ● Permite una gran interacción y dinamismo por parte del usuario con la página web Lenguaje interpretado por un intérprete ● En el navegador (JS en cliente) ● En el servidor (p. ej. node.js) ¡No compilamos! ● ¡Detectamos errores de sintaxis en tiempo de ejecución! ● Es case sensitive ● Las sentencias acaban con “;” armpower.blogs.upv.es 6 Hola Mundo en JavaScript <html> <head> <title>Hola Mundo</title> </head> <body> <script type="text/javascript"> document.write("Hola Mundo"); </script> </body> </html> armpower.blogs.upv.es 7 JavaScript: Declaración de variables ● Cuando se declara una variable (var), no se especifica su tipo: ● tipo se infiere del contenido que tenga var nombreVariable; ● El nombre de las variables tiene que empezar por una letra o guión bajo ● Las variables pueden ir cambiando de tipo y de contenido: var variable; variable = [0,2,4,6]; //Array variable = "Hola mundo"; //String variable = 6; //Integer ● Sólo habrá errores de compilación en operaciones de variables de tipos diferentes armpower.blogs.upv.es 8 JavaScript: Tipos de datos ● Primitivos: ● ● number, string, boolean Compuestos: ● Objetos, funciones, arrays.. armpower.blogs.upv.es 9 JavaScript: Comentarios ● Dos tipos: ● Comentario de una sola línea: //comentario ● Comentario de bloque: /* comentario */ armpower.blogs.upv.es 10 JavaScript: Operadores ● == ● != ● > ● < ● <= ● >= ● && ● || ● ! ● += ● -= ● ++ ● -armpower.blogs.upv.es 11 JavaScript: Estructuras de control ● Condicional if: if (condición){ código a efectuar si se cumple la condición; } else{ código a efectuar si no se cumple la condición; } ● Otra manera de hacerlo: var variable = (condición) ? expresión_cierta : expresión_falsa armpower.blogs.upv.es 12 JavaScript: Estructuras de control ● Bucle while: while (condición){ código a realizar mientras se cumpla la condición; } ● Bucle do while: do{ código a realizar mientras se cumpla la condición; } while (condición); armpower.blogs.upv.es 13 JavaScript: Estructuras de control ● Bucle for: for (valor_inicial; condición; incremento/decremento){ código a realizar mientras se cumpla la condición; } ● Bucle for in (para propiedades de objetos): var curso = new Curso(“Titulo”, 20); for (var prop in curso) { document.write(curso[prop]); } Opción switch: switch (expresión){ case valor: código a realizar; case valor2: código a realizar; ………………………… armpower.blogs.upv.es 14 JavaScript: Estructuras de control ● Opción switch: switch (expresión){ case valor: código a realizar; case valor2: código a realizar; ………………………… case valorn: código a realizar; } ● Con break podemos hacer que no siga la evaluación de la expresión armpower.blogs.upv.es 15 JavaScript: Objetos ● En JavaScript todo son objetos que derivan del objeto base Object ● Podemos crear un objeto, y añadirle atributos una vez creado ● Al crearlo, podemos indicar un prototipo var producto = new Object(); producto.nombre = producto.precio = 3; producto.muestra = imprimir; function imprimir(){ document.write(“El producto es un “ + producto.nombre + “<br/>”); document.write(“El producto cuesta “ + producto.precio + “<br/>”); } producto.muestra(); producto.precio = 4; producto.muestra(); armpower.blogs.upv.es 16 JavaScript: Objetos ● Dos maneras de inicializar los atributos y métodos de un objeto: var coche1 = new Object(); coche1.matricula = “3798CGN”; coche1.esNuevo = True; coche1.numPuertas = 4; var coche2 = {matricula: “3798CGN”, esNuevo: True, numPuertas: 4}; armpower.blogs.upv.es 17 JavaScript: Objetos ● Para definir una clase en JS, simplemente definimos una función (el constructor), y luego creamos los objetos con new seguido del constructor ● Usamos this para acceder al objeto en el constructor: function Producto(){ this.nombre = “libro”; this.precio = 3; } var producto = new Producto(); document.write(“Producto “ + producto.nombre); armpower.blogs.upv.es 18 JavaScript: Objetos ● Clases con métodos: function Producto(){ this.nombre = “libro”; this.precio = 3; this.muestra = imprimir; } function imprimir(){ document.write(“El producto es un “ + producto.nombre + “<br/>”); document.write(“El producto cuesta “ + producto.precio + “<br/>”); } var producto = new Producto(); document.write(“Producto “ + producto.muestra()); ● unction Producto(){ armpower.blogs.upv.es this.nombre = “libro”; 19 JavaScript: Funciones ● En JavaScript las funciones son un tipo de objeto más ● Palabra clave function para definir funciones ● No indicamos si devuelve (o no) algo una función. ● ● Si no devuelve nada, devuelve undefined No indicamos tipos function suma (a, b) { return a + b; } function imprime (a) { document.write(“Num “ + a); } armpower.blogs.upv.es 20 JavaScript: Funciones ● Llamar a funciones JavaScript desde el HTML: <script type=”text/javascript”>function hola() {alert(“¡hola!”);}</script> ● Desde HTML, en un enlace <a href=”JavaScript:hola()”>Pincha aquí</a> ● Desde HTML, en un evento <input type=”button” value=”Di hola” onClick=”hola();” /> ● Funciones anónimas: ● Podemos asignar directamente una función a una variable sin darle nombre: var hola = function() { saludo = “Hola”; return saludo; } saludar = hola ● armpower.blogs.upv.es 21 JavaScript: Pop-ups ● Manera sencilla de avisar al usuario ● Los hay de tres tipos: alert, confirm y prompt ● Son de fácil programación ● Se suele utilizar la interfaz gráfica del sistema operativo para dibujarlos en pantalla ● ● algunos navegadores los implementan por cuenta propia Alert ● mensaje de alerta que avisará al usuario de algún evento: – alert("Ejemplo de ‘alert’ en JavaScript"); armpower.blogs.upv.es 22 JavaScript: Pop-ups ● Con el confirm se puede mostrar un mensaje al usuario que esperará una respuesta de este, y devolverá true o false dependiendo de la decisión que haya tomado: ● confirm("Ejemplo de ‘confirm’ en JavaScript"); ● ● El prompt es un mensaje que espera una cadena de caracteres introducida por el usuario y la devuelve en forma de String: ● prompt("Ejemplo de ‘prompt’ en JavaScript"); armpower.blogs.upv.es 23 JavaScript: Funciones predefinidas ● ● eval(String); ● Evalúa la cadena String que le viene por su único parámetro como si fuera una sentencia JavaScript. Si es una sentencia correcta, se ejecutará: ● eval(“alert(‘La función eval ejecutará este alert’);”); parseInt(String, [opcional]base); ● Convierte la cadena de caracteres del primer parámetro (que deben ser números) a entero. El segundo parámetro opcional indica la base del número (por defecto, base 10). Si la conversión no se puede efectuar, devolverá NaN: parseInt(“479”); armpower.blogs.upv.es 24 JavaScript ● Actualmente, prácticamente todos los navegadores soportan JavaScript ● Podemos utilizar las etiquetas <noscript> y </noscript> como alternativa para los navegadores que no acepten JavaScript: <noscript>Si puede leer este mensaje, es que su navegador no soporta JavaScript.</noscript> armpower.blogs.upv.es 25 La API de Node.js: extendiendo JS ● Procesos ● Filesystem ● Networking ● Utilidades ● http://nodejs.org/api/ ● armpower.blogs.upv.es 26 Node.js Hello World: Simple Servidor HTTP var http = require('http'); //importamos una libreria http.createServer(function (req, res) { //definimos una funcion para manejar peticiones http res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); } var s = http.creatServer(manejador); //creamos servidor s.listen(8000, "127.0.0.1"); armpower.blogs.upv.es //y lo ponemos en marcha 27 ● sudo shutdown -h now armpower.blogs.upv.es 28