PDF de programación - Módulos node.js

Imágen de pdf Módulos node.js

Módulos node.jsgráfica de visualizaciones

Publicado el 22 de Julio del 2018
983 visualizaciones desde el 22 de Julio del 2018
2,2 MB
54 paginas
Módulos node.js

Juan Quemada, DIT - UPM

1

© Módulos node.js
node.js incluye un sistema de módulos que facilita el diseño de grandes programas

n Cada modulo es un fichero diferente con un espacio de nombres local

w Un módulo es una closure creada por node, ver http://nodejs.org/api/modules.html

Un módulo se importa en otro módulo con la función

n require(<fichero>) (ver los detalles en: http://nodejs.org/api/modules.html)

Un módulo tiene una parte pública (interfaz) y otra privada (implementación)

n Interfaz: parte visible en el exterior que permite utilizar el módulo a otros

w La interfaz del módulo se define individualmente los métodos exportados o el objeto interfaz

w Los métodos se exportan individualmente con: exports.metodo_individual = <metodo>
w El objeto interfaz completo se exporta con: module.exports =<objeto_interfaz>

n Implementación: código del módulo que crea la funcionalidad

w El bloque de instrucciones del módulo (cierre o closure)

2

© Juan Quemada, DIT, UPM Ejemplo de módulos de node.js
El ejemplo siguiente es un programa con dos módulos, cada uno en un fichero diferente

n Módulo 1: fichero mi_app.js

w importa el otro módulo (en fichero mi_app.js) con: var circulo = require(‘./circulo.js');

w ambos ficheros están en el mismo directorio, hay que utilizar el path ‘./circulo.js'

n Módulo 2: fichero circulo.js

w Exporta los dos métodos de la interfaz, area y circunferencia, con exports.<método> = …..

// Modulo 1: fichero ejecutable mi_app.js, que importa circulo.js

var circulo = require('./circulo.js'); // al estar en el mismo directorio, el path es ./circulo.js

console.log( 'Area (radio 4): ' + circulo.area(4)); // => Area (radio 4): 50.26548245743669

// Modulo 2: fichero con librería circulo.js
// -> exporta las propiedades y métodos de la variable global exports

var PI = Math.PI; // variable privada del módulo, no es visible en el exterior del módulo

exports.area = function (r) { return PI * r * r; }; // método de la interfaz
exports.circunferencia = function (r) { return 2 * PI * r; }; // método de la interfaz

3

© Juan Quemada, DIT, UPM Agenda como modulo
node.js encapsulando

un cierre

4

© Juan Quemada, DIT, UPM Agenda como modulo
node.js encapsulando

una clase

5

© Juan Quemada, DIT, UPM RegExp I: Búsqueda de patrones

6

© Expresiones regulares: RegExp

◆Expresiones regulares:

4Mecanismo muy eficaz para procesar strings

• Soportado por muchos lenguajes y herramientas (UNIX)

»Emacs, vi, AWK, GREP, PERL, Java, Javascript, Ruby, ...

4Definen patrones que reconocen cadenas de caracteres específicas

• Si un patrón reconoce una cadena, se dice que casa (match) con el patrón

◆En JS se definen en la clase RegExp y se pueden crear con

4Constructor: RegExp(“expresion-regular”)
• El string puede ser cualquier expresión regular

4RegExp literal: /expresion-regular/
4Info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

7

© Búsqueda de patrones

◆"string".match(/patrón/) busca /patrón/ en "string"

4Devuelve primera ocurrencia del patrón en un array ([match]), y si no casa devuelve null

◆Algunos patrones básicos

4caracter: /a/ reconoce solo el caracter “a”
4sequencia: /abc/ reconoce la secuencia “abc”
4principio de string: /^hoy/ reconoce “hoy” al principio del string
4final de string: /hoy$/ reconoce “hoy” al final del string
4cualquier caracter: /./ reconoce cualquier caracter

"Es hoy".match(/hoy/) => ['hoy']
"Es hoy”.match(/hoy/)[0] => 'hoy'

"Es hoy".match(/hoy$/) => ['hoy']
"Es hoy".match(/^hoy/) => null
"Es hoy”.match(/^…./) => [‘Es h']

8

© Clases y rangos de caracteres

◆ Clase de caracteres: patrón con varios caracteres alternativos entre corchetes

4Ejemplo de clase de caracteres: /[aeiou]/ cualquier vocal (minúscula)
4Ejemplo de clase negada: /[^aeiou]/ no debe ser vocal (minúsc.)
4Patrón \s: reconoce separadores [\f\n\r\t\v\u00a0\u1680 ..…. ]

◆ Rango de caracteres: Patrón con un rango de caracteres de ASCII alternativos

4Rango de caracteres: /[a-z]/ rango “a-z” de letras ASCII
4Patrón \w: equivale a [a-zA-Z0-9_]
4Patrón \d: equivale a [0-9]

"canciones".match(/[aeiou]/) => [‘a']

"canciones".match(/c[aeiou]/) => ['ca']

"canciones".match(/n[aeiou]/) => ['ne']

9

© Controles y match()

match() admite controles: i , g y m

n i: insensible a mayúsculas
n g: devuelve array con todos los “match”
n m: multilínea, ^ y $ representan principio y fín de línea

"canciones".match(/[aeiou]/g) => ['a', 'i', 'o', 'e']
"canciones".match(/c[aeiou]/g) => ['ca', 'ci']

"Hoy dice hola".match(/ho/i) => ['Ho']
"Hoy dice hola".match(/ho/ig) => ['Ho', 'ho']

"Hola Pepe\nHoy vás".match(/^Ho/g) => ['Ho']
"Hola Pepe\nHoy vás".match(/^ho/gim) => ['Ho', 'Ho']

10

© RegExp II: Repetición y alternativa

11

© Operadores de Repetición

◆+ (una o más veces): /a+/ casa con: “a”,“aa”, “aaa”, ..
◆? (cero o una vez): /a?/ casa solo con: “” y “a”
◆* (cero o más veces): /a*/ casa con: “”, “a”, “aa”, “aaa”, ...
◆{n} (n veces): /a{2}/ casa solo con: “aa”
◆{n,} (n o más veces): /a{2,}/ casa con: “aa”, “aaa”, “aaaa”, ...
◆{n,m} (entre n y m veces): /a{2,3}/ casa solo con: “aa” y “aaa”

"tiene".match(/[aeiou]+/g) => ['ie', 'e'] // cadenas no vacías de vocales

"tiene".match(/[aeiou]?/g) => ['', ‘i', 'e', '', 'e', ''] // vocal o nada

"tiene”.match(/[aeiou]*/g) => ['','ie', '', 'e', ''] // cadenas de vocales (incluyendo “")

"Había un niño.”.match(/[a-zñáéíóú]+/ig) => [ 'Había', 'un', 'niño' ]
// casa con palabras en castellano: ascii extendido con ñ, á, é, í, ó, ú

12

© Repetición ansiosa o perezosa
◆Los operadores de repetición son “ansiosos” y reconocen

4la cadena más larga posible que casa con el patrón

◆Pueden volverse “perezosos” añadiendo “?” detrás

4Entonces reconocen la cadena más corta posible

"aaabb".match(/a+/) => ['aaa']

"aaabb".match(/a+?/) => ['a']

"ccaaccbccaa".match(/.+cc/) => ['ccaaccbcc']

"ccaaccbccaa".match(/.+?cc/) => ['ccaacc']

13

© Patrones alternativos

◆“|” define dos patrones alternativos, por ejemplo

4/[a-z]+/ casa con palabras escritas con caracteres ASCII
4/[0-9]+/ casa con números decimales
4/[a-z]+|[0-9]+/ casa con palabras o números

"canciones".match(/ci|ca/) => [ ‘ca’ ]
"canciones".match(/ci|ca/g) => [ ‘ca','ci' ]

“1 + 2 --> tres”.match(/[a-z]+|[0-9]+/g) => ['1', '2', 'tres']

14

© RegExp III:
Subpatrones y sustituciones

15

© Subpatrones

◆ Dentro de un patrón podemos delimitar subpatrones

4Un subpatrón es una parte del patrón delimitada entre paréntesis

◆Por ejemplo /(c)([aeiou])/ tiene dos subpatrones

4(c) es el primer subpatrón
4([aeiou]) es el segundo subpatrón y así sucesivamente

◆ "string".match(/patrón/) busca patrón y subpatrones en el string
4Devuelve array: [match, match_subpatron_1, match_subpatron_2, …]

“canciones”.match(/(c)([aeiou])/) => [‘ca’,'c', ‘a']

“canciones”.match(/c([aeiou])n/) => ['can', ‘a’]

“canciones”.match(/(..)..(..)/) => ['cancio', 'ca', 'io']

16

© Sustitución de patrones

◆ La clase String tiene el método replace() para sustituir patrones
◆ La expresión: "string".replace(/patrón/, x)

4devuelve "string" sustituyendo el primer match de "patrón" por x

◆ El patrón también puede tener controles i, g y m

4i: insensible a mayúsculas
4g: devuelve string con todos los “match” sustituidos
4m: multilínea, ^ y $ representan principio y fín de línea

"Número: 142719".replace(/1/, 'x') => 'Número: x42719’

"Número: 142719".replace(/1/g, 'x') => 'Número: x427x9’

"Número: 142719”.replace(/[0-9]+/, '<número>') => 'Número: <número>'

17

© Sustitución con subpatrones
◆ Dentro de un patrón podemos delimitar subpatrones

4Un subpatrón se delimita con paréntesis

◆ Por ejemplo /([ae]+)([iou]*)/ tiene dos subpatrones

4$1 representa el match del primer subpatrón
4$2 el match del segundo y así sucesivamente
4$3 …..

"Número: 142,719".replace(/([0-9]+)(,[0-9]*)?/, '$1') => 'Número: 142'

"Número: 142,719".replace(/([0-9]+)(,[0-9]*)?/, '0$2') => 'Número: 0,719’

"Número: 142,719".replace(/([0-9]+),([0-9]*)?/, '$1.$2') => 'Número: 142.719’

18

© Eventos node.js

19

© Eventos y Manejadores

JavaScript utiliza eventos para interaccionar con el entorno
n Hay muchos tipos: Temporizadores, métodos HTTP, datos, ...
Un evento se programa al instalar un manejador (callback)
n El manejador es una función que se ejecuta al ocurrir el evento
El script inicial programa los eventos iniciales
n Estos se ejecutan al ocurrir los eventos programados

w Estos pueden programar nuevos eventos, si fuesen necesarios

Eje de
tiempos

Programa
principal

evento a

evento b

manejador a

manejador b

20

© Juan Quemada, DIT, UPM Eventos periódicos con setInterval(....)

JavaScript tiene una función setInterval (..)
n para programar eventos periódicos

setInterval (manejador, periodo_en_milisegundos)
n tiene 2 parámetros

w manejador: función que se ejecuta al ocurrir el evento
w periodo_en_milisegundos: tiempo entre eventos periódicos

1 seg

2 seg

3 seg

4 seg

5 seg

Eje de
tiempos

setInterval(
manejador,
1000_miliseg.
)

manejador

manejador

manejador

manejador

manejador

21

© Juan Quemada, DIT, UPM Ejemplo con temporizador II
  • Links de descarga
http://lwp-l.com/pdf12670

Comentarios de: Módulos node.js (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad