TY - GEN AU - Ismael López Quintero TI - Node.js: JavaScript en el lado del servidor Manual práctico avanzado SN - 9786076225769 AV - QA76.625 2016 PB - Alfaomega KW - Programación WEB N1 - utores LÓPEZ QUINTERO , Ismael 0 Editorial Alfaomega, Altaria Editorial 0 Año de edición 2016 2016 Código de barras 9786076225769 9786076225769 ISBN 978-607-622-576-9 978 ISBN E-Book 9786076225684 9786076225684 Materiales adicionales No 0 Número de la edición 1 1 Número de páginas 536 536 Dimensiones 17x23 cms. 17 Peso en gramos Encuadernación Rústica 0 Idioma Español 0; ¿A quién va dirigido este libro? ............................................................9 Convenciones generales ......................................................................9 Capítulo 1 Introducción ................................................................. 11 1.1 Introducción ..................................................................................12 1.2 A tener en cuenta antes de comenzar ..........................................16 Capítulo 2 ¿Qué es necesario saber de JavaScript? .................... 17 2.1 Introducción ..................................................................................18 2.2 Entorno de trabajo con JavaScript en el lado del cliente .............18 2.3 Notación JSON .............................................................................22 2.3.1 Ejercicio 1 ........................................................................................... 29 2.4 Ámbitos.........................................................................................29 2.5 Lambdas .......................................................................................33 2.5.1 Ejercicio 2 ........................................................................................... 40 2.6 Cierres ..........................................................................................41 2.6.1 Ejercicio 3 ........................................................................................... 49 2.7 Callbacks ......................................................................................49 2.7.1 Ejercicio 4 ........................................................................................... 56 2.8 Objetos ligeros..............................................................................58 2.8.1 Ejercicio 5 ........................................................................................... 61 2.9 Creación de objetos encapsulados y ligeros. ...............................61 2.9.1 Ejercicio 6 ........................................................................................... 64 2.10 Defi nición dinámica de módulos .................................................65 2.10.1 Ejercicio 7 ......................................................................................... 71 2.11 Otras características ...................................................................71 Capítulo 3 Introducción a node.js ................................................. 77 3.1 Introducción ..................................................................................78 3.2 Ejemplo de la biblioteca en node.js. .............................................81 © Alfaomega - Altaria 5 JavaScript del lado del servidor 3.2.1 Ejercicio 8 ........................................................................................... 92 3.3 Gestor de paquetes NPM .............................................................93 3.3.1. Ejercicio 9 .......................................................................................... 97 3.4 Creación de módulos y publicación ..............................................97 3.5 Lanzando un servidor en node.js ...............................................101 3.6 Emisión de eventos ....................................................................102 3.6.1 Ejercicio 10 ....................................................................................... 105 3.7 Flujos de datos o streams ..........................................................106 3.7.1 Ejercicio 11 ........................................................................................112 3.8 Middlewares ...............................................................................113 3.8.1 Ejercicio 12 ........................................................................................115 3.9 Entornos de ejecución ................................................................116 Capítulo 4 MVC con node.js ........................................................ 119 4.1 Arquitectura MVC .......................................................................120 4.2 MVC en node.js: Express ...........................................................122 4.3 Vistas con JADE .........................................................................137 4.3.1 Ejercicio 13 ....................................................................................... 145 4.4 Ejemplo aplicación web en node.js usando Express .................146 4.4.1 Ejercicio 14 ....................................................................................... 158 4.5 Seguridad con passport y encriptación de clave ........................158 4.6 Otros paquetes interesantes en nuestra aplicación ...................166 4.6.1 Logging y el paquete morgan ........................................................... 166 4.6.2 El paquete browserify ....................................................................... 171 4.6.2.1 Ejercicio 15 ....................................................................................................................173 4.6.3 El paquete grunt ............................................................................... 174 4.6.3.1 Pruebas unitarias con grunt ...........................................................................................177 4.6.3.2 Compresión de fi cheros extensos para pasar a producción ..........................................179 4.6.3.3 Comprobación de errores en el código con grunt-shint .................................................180 4.6.3.4 Concatenación de fi cheros con grunt ............................................................................183 4.6.3.5 Ejercicio 16 ....................................................................................................................186 4.6.4 El paquete forever ............................................................................ 187 4.6.5 El paquete angular............................................................................ 188 4.6.5.1 Ejercicio 17 ....................................................................................................................200 4.6.6 El paquete socket.io ......................................................................... 201 4.6.6.1 Ejercicio 18 ....................................................................................................................208 Capítulo 5 Acceso a datos NoSQL. Bases de datos documentales. MongoDB ......................................... 209 5.1 Introducción ................................................................................210 5.2 Características de las bases de datos documentales ...............210 5.3 Instalación de MongoDB y MongoVUE ......................................211 5.4 Estructuración de los datos en Documentos ..............................214 5.4.1 Ejercicio 19 ....................................................................................... 222 6 © Alfaomega - Altaria Node.js. Manual práctico avanzado 5.5 Operaciones CRUD desde node.js ............................................223 5.5.1 Creación ........................................................................................... 224 5.5.2 Lectura .............................................................................................. 226 5.5.3 Actualización ..................................................................................... 232 5.5.4 Borrado ............................................................................................. 233 5.5.5 Ejercicio 20 ....................................................................................... 235 5.6 Capa de datos MVC. Acceso a MongoDB..................................236 5.6.1 Ejercicio 21 ....................................................................................... 241 5.7 Servidor replicado de acceso a datos. Replica Set ....................241 5.8 Servidor fragmentado de acceso a datos. Sharding ..................247 5.9 Acceso autorizado a bases de datos MongoDB .........................253 5.10 Copias de seguridad en MongoDB...........................................256 Capítulo 6 Aplicación web: implementación de una red social con compartición de estado entre amigos, likes & dislikes y chat ................................ 259 6.1 Introducción ................................................................................260 6.2 Package.json ..............................................................................261 6.3 Modelo del dominio ....................................................................262 6.4 Capa de acceso a datos MongoDB con mongoose ...................274 6.5 Capa de Servicio ........................................................................280 6.5.1 Capa de servicio al cliente ................................................................ 298 6.6 Conjunto de pruebas unitarias sobre la capa de servicio ...........318 6.7 El controlador de la aplicación....................................................341 6.8 Vistas y scripts del lado del cliente .............................................356 6.9 Automatización de tareas ...........................................................368 6.10 La aplicación en funcionamiento ..............................................369 6.11 Ejercicio 22 ...............................................................................371 Capítulo 7 Ejercicios resueltos ..................................................... 373 7.1 Ejercicio1 ....................................................................................374 7.2 Ejercicio 2 ...................................................................................379 7.3 Ejercicio 3 ...................................................................................386 7.4 Ejercicio 4 ...................................................................................391 7.5 Ejercicio 5 ...................................................................................398 7.6 Ejercicio 6 ...................................................................................402 7.7 Ejercicio 7 ...................................................................................408 7.8 Ejercicio 8 ...................................................................................414 7.9 Ejercicio 9 ...................................................................................421 7.10 Ejercicio 10 ...............................................................................422 © Alfaomega - Altaria 7 JavaScript del lado del servidor 7.11 Ejercicio 11 ...............................................................................423 7.12 Ejercicio 12 ...............................................................................427 7.13 Ejercicio 13 ...............................................................................428 7.14 Ejercicio 14 ...............................................................................433 7.15 Ejercicio 15 ...............................................................................444 7.16 Ejercicio 16 ...............................................................................447 7.17 Ejercicio 17 ...............................................................................453 7.18 Ejercicio 18 ...............................................................................460 7.19 Ejercicio 19 ...............................................................................464 7.20 Ejercicio 20 ...............................................................................467 7.21 Ejercicio 21 ...............................................................................472 7.22 Ejercicio 22 ...............................................................................476 7.22.1 Fichero package.json...................................................................... 477 7.22.2 Ficheros del modelo del dominio en el servidor.............................. 478 7.22.3 Capa de acceso a datos ................................................................. 486 7.22.4 Capa de servicio ............................................................................. 490 7.22.4.1 Capa de servicio al cliente ...........................................................................................501 7.22.5 Pruebas unitarias ............................................................................ 512 7.22.6 El controlador y sus ramas ............................................................. 517 7.22.7 Vistas y scripts de cliente ............................................................... 526 7.22.8 Automatización de tareas ............................................................... 534 7.22.9 La aplicación en funcionamiento .................................................... 535 Bibliografía .................................................................. 536; Ingeniería en Tecnologías de la Información y Comunicación N2 - Tradicionalmente vinculado al navegador cliente, JavaScript ha dado el paso al servidor, y no hay quien lo pare. La asincronía de que hace gala lo convierte en la solución ideal para aquellos entornos de producción con múltiples eventos concurrentes en el propio servidor, dando una eficaz respuesta a las aplicaciones en tiempo real. Este paso de JavaScript hacia el servidor lo denominamos node.js. Usando el motor JavaScript v8 de Google, la eficiencia y la velocidad de ejecución son sus principales características. Tipos de aplicaciones como chats, foros o redes sociales son fácilmente implementadas con node.js. Tiene ante sí un manual que le adentrará en el universo de la asincronía y de JavaScript en el lado del servidor, aprovechando toda la potencia y la velocidad de este lenguaje en el desarrollo de sus aplicaciones web ER -