SlideShare una empresa de Scribd logo
Curso introductorio a
Raptor.js
• Introducción al entorno Node.js
• Formato CommonJS
• Estructura de paquetes y NPM
• Marco de trabajo Raptor.js
• Objetivo características e instalación
• Estructura de un proyecto Raptor.js
• Estructura de componentes
Sumario
• Manifiesto de instalación de un componente
• Clase principal del componente
• Middlewares y controladores
• Inyector de dependencias
• Gestión de eventos del core
• Introducción al ejemplo TaxiNode
Sumario
Proyecto Raptor
Nace en junio de 2014, como una idea para
crear tecnologías base para el desarrollo de
aplicaciones web, siguiendo estándares de
seguridad y de optimizar los procesos de
desarrollo….
Colaboradores
William Amed
GDAI Las Tunas
Jorge Carmenate
Geocom SA
Uruguay
Jorge Miralles
Mercado Libre
Uruguay
Roberto García
UIC Las Tunas
Pedro Abreu
GDAI Las Tunas
Ricardo Suárez
Productor Adriano DJ
Cuba
“Node.js es una plataforma construida encima del entorno
de ejecución javascript de Chrome para fácilmente
construir rápidas, escalables aplicaciones de red. Node.js
usa un modelo de E/S no bloqueante dirigido por eventos
que lo hace ligero y eficiente, perfecto para aplicaciones
data-intensive en tiempo real”
Node fue galardonado en 2012 con el
premio “Tecnología del Año”
por la revista InfoWorld
• Orientado a eventos asíncronos
• No existen bloqueos de proceso
• Ideal para construir aplicaciones de red
escalables
• Utiliza la especificación EICMAScript
Características
El NPM (Node Package Manager) es el gestor
de paquetes oficial para Node.js y proporciona
las herramientas necesarias para la
instalación de paquetes en proyecto de
Node.js
Gestor de paquetes
Al instalar Node.js es instalado además el
gestor de paquetes NPM y ambos pueden
ser verificados en la terminal de nuestro
equipo
Instalación
Instalación
Hola mundo
Archivo hola.js ----
console.log("Hola mundo Node.js")
Hola mundo
En la terminal especificaremos el comando:
Node soporta e implementa el sistema que CommonJS define
para la gestión de módulos, lo cual es importante no sólo a la
hora de organizar el código sino a la hora de asegurar que se
ejecuta sin interferir en el código de los demás módulos
aislándolos unos de otros de tal manera que no haya conflicto
entre, por ejemplo, funciones o variables con el mismo nombre.
A esto se le conoce como scope isolation.
Formato CommonJS
1. Uso de la función require() para indicar que queremos
emplear una determinada librería pasándole el
identificador de la librería (su nombre) como parámetro.
Formato CommonJS
2. La existencia de la variable exports dentro de los
módulos. Esta variable es un objeto que es el único modo
posible que tiene un módulo de hacer públicas funciones
y demás objetos, añadiéndolas a exports conforme se
ejecuta el código de dicho módulo.
Formato CommonJS
3. La definición dentro de un módulo de la variable
module. Esta variable es un objeto con la propiedad
obligatoria id que identifica unívocamente al módulo y por
tanto, se obtiene de él el exports que interese al
desarrollador.
Formato CommonJS
Archivo circulo.js ----
Ejemplo CommonJS
var PI = 3.14;
module.exports.area = function (r) {
return PI * r * r;
};
module.exports.circumference = function (r) {
return 2 * PI * r;
};
Archivo hola.js ----
Ejemplo CommonJS
var circulo=require("./circulo");
var area=circulo.area(50);
console.log("El area es:",area)
Estructura de paquete
Un paquete de Node es definido a través de un
archivo package.json, además contará
opcionalmente con un directorio node_modules
en caso de contener dependencias.
package.json
El archivo package.json describe al paquete a través
de un conjunto de directivas de instalación, se
especificará de forma obligatoria los atributos name
y version.
En el directorio actual puede ser creado un paquete de forma
interactiva a través del comando.
npm init
Archivo package.json ----
package.json
{
"name": "mipaquete",
"version": "1.0.1",
"description": "una descripción",
"main": "index.js",
"author": "Jhon Doe",
"license": "MIT",
"dependencies": {
"fs-extra": "1.2.2"
}
}
node_modules
El directorio node_modules lo
encontraremos con frecuencia en los
paquetes de Node, en este se ubicarán
todas las dependencias especificadas en el
archivo package.json.
Instalación de un paquete
Uno de los comandos más utilizados en el gestor de
paquetes es sin duda install, que proporciona una
forma rápida de instalación de paquetes desde el
repositorio npmregistry.
npm install fs-extra -g
npm install fs-extra --save
Instalación de un paquete
-g esta directiva instalará en forma global el
paquete especificado.
--save instalará el paquete especificado en
el directorio node_modules del paquete que
invoca la operación de instalación.
Tiene capacidad de manejar un alto número de conexiones y
procesar un enorme número de operaciones de Entrada/Salida
muy rápidamente.
• Interfaces ligeros REST/JSON
• Aplicaciones monopágina
• Datos por streaming
• Comunicación
Resumen
Es un framework full stack para el desarrollo
de aplicaciones web, incluye componentes
que garantizan un marco de abstracción para
la seguridad y utilitarios que siguen el principio
de desarrollo ágil con baja carga cognitiva.
A principios de 2018 se crea la rama para
Node.js denominada Raptor.js y que apuesta
por el futuro de las tecnologías en el
desarrollo web, la serie 1 de Raptor.js es
lanzada ese mismo año.
• Reducir la carga cognitiva y costos de desarrollo
• Garantizar los procesos y modelos de seguridad
establecidos
• Componentes de comunicación para aplicaciones en
tiempo real
• Soporte a modelos de alta concurrencia de eventos
Objetivo
Arquitectura orientada componentes
Características
Componente de seguridad, implementación de un MCA
basado en estructuras
Características
- autenticación, autorización y auditoria.
- Extensión del modelo de control de acceso
basado en roles hacia un enfoque
estructurado.
- Granularidad en la gestión de privilegios,
se crea el concepto acciones.
Componente biométrico de reconocimiento de usuarios
Características
Componentes utilitarios (producción-desarrollo)
Características
Características
Componentes utilitarios (producción-desarrollo)
Raptor.js está disponible como paquete en el
npm y para la creación de un proyecto es
necesario la instalación de la herramienta de
desarrollo raptor-cli que te asistirá para este
propósito.
Instalación
npm install raptor-cli -g
El cli de Raptor.js es una herramienta utilitaria de
consola para ambientes de desarrollo, permite la
creación de proyectos Raptor.js-v2 así como la
ejecución en modo de desarrollo de la aplicación.
Herramienta raptor-cli
rap -h
rap create <nombre>
//versión del cli
//crear proyecto
rap run //ejecutar proyecto
Un proyecto es la base donde se desarrolla nuestra
aplicación, consta de la configuración y los
componentes creados.
Nuevo proyecto Raptor.js
options.json
options.prod.json
package.json
//componentes del directorio src
//desarrollo
//producción
Estructura del proyecto
options.json
options.prod.json
package.json //descripción del componente y dependencias
//configuración de desarrollo
//configuración de producción
config
public
src
run.app.js
bootstrap.js
//componentes con nuestro código fuente
//entrada de desarrollo
//entrada al core al framework
//directorio público, recursos web para JS, CSS
//contiene la configuración del proyecto
{
"mode": "development",
"database": {
"state": "on",
"options": {
"port": 3306,
"dialect": "mysql",
"host": "127.0.0.1"
},
"api": true,
"password": "root",
"user": "root",
"name": "raptorjs"
},
"port": 4440,
"socketio":{…},
"language":{…},
"secret": "3dfa5h2g$ae946e2gdi5cb%g*1#$5e25",
"proyectName": "RaptorJS"
}
Configuración (options.json)
Modo en que corre el proyecto
Esta configuración es utilizada
por el componente orm y
configura la conexión para el
ORM Sequelize
Puerto en que escuchará el proyecto
{
"mode": "development",
"database": {…},
"port": 4440,
"socketio":{…},
"language":{…},
"secret": "3dfa5h2g$ae946e2gdi5cb%g*1#$5e25",
"proyectName": "RaptorJS"
}
Configuración (options.json)
Llave secreta para la generación
de tokens de seguridad
Determina si la tecnología socket.io
estará activa
Nombre del proyecto
Configuración (options.json)
{
"database": {…},
"port": 4440,
"socketio": {…},
"language": {…},
"secret": "3dfa5h2g$ae946e2gdi5cb%g*1#$5e25",
"proyectName": "RaptorJS",
"scopes":["@raptorjs","@micope"],
"publish":{
"bootstrap":"dist",
"jquery":""
},
"maxEventListeners":80
}
Escanea en node_modules
los scopes para encontrar
componentes Raptor.js
Expone a través de express
los paquetes de node_modules
especificados. Se publica bajo
el prefijo /public
Cantidad máxima de susbcripciones
que soportará el core de Raptor.js,
por defecto el valor es 80.
Componente Raptor.js
DefaultController.js
package.json
//plantillas Ejs del componente
//contiene los modelos de nuestro componente
//repositorios del componente
Controllers
Models
Repositories
manifest.json
index.js
//recursos públicos a ser expuestos por express
//clase principal del componente
//manifiesto de instalación
//contiene el archivo language.json
//ejemplo de controlador
i18n
Resources
Views
Los componentes están ubicados en el directorio src en un agrupador
Manifiesto de instalación
{
"state": false,
"name": "TroodonNode",
"author":"William Amed - watamayo90@gmail.com",
"description":"Descripción del componente",
"version": "1.0.1",
"require":{
"RaptorNode":">=1.0.1"
}
}
Determina si el componente
estará activo
Nombre del componente, deberá
coincidir con el directorio que lo
contiene
El atributo require determina si este componente
dependerá en funcionamiento de otro
componente Raptor.js
'use strict';
/**
*
*
* @Route("/example")
*/
class exampleNode {
middleware(){
}
configure(R){
}
}
module.exports=exampleNode
Entrada principal index.js
Configurador de midlewares del
componente
Configura el componente en el
momento de su reconocimiento ante
el core de Raptor.js
Prefijo de ruta de este componente
Entrada principal index.js
El prefijo de ruta del componente sirve como forma de agrupación de
las rutas que se registren en este propio componente, si se establece
significa que todas las rutas declaradas en los controladores dentro
del componente tomarán como prefijo el establecido en esta clase.
Prefijo de ruta
Express y middlewares
Raptor.js utiliza Express como marco de aplicación web o marco de
servidor estándar para encargarse del manejo del direccionamiento
web y provee todas las funciones básicas del manejo del protocolo
http.
Express se basa en el patrón middleware para crear un stack que
encarga de interactuar con la petición actual.
Raptor.js configura todos estos conceptos por nosotros y solo
debemos preocuparnos de definir nuestros patrones de ruta.
Express y middlewares
Express y middlewares
Express y middlewares
middleware(express, router){
// Registro de un patrón de ruta directamente
// en el enrutador
router.all("/user/list",function(req,res,next){
res.send(“hola mundo”)
})
}
http://miproyecto.cu/user/list
Ruta definida
Responde “hola mundo”
Express y middlewares
middleware(express, router){
express.use(function(err,req,res,next){
/**
* Si se define el parámetro err
* el middleware es ejecutado cuando
* exista un error en los middlewares
* superiores del stack
*/
console.log(err)
})
}
Controladores
'use strict';
/**
* prefijo de ruta todas las definiciones en el controlador
*
* @Route("/example")
*/
class MiControlador extends R.Controller {
configure() {
}
/**
*
* @Route("/holaruta",method="all")
*
*/
holaRuta(req, res, next) {
res.send('hola ruta')
}
}
module.exports = MiControlador;
Anotación Route define
un patrón de ruta
utilizado por express
Prefijo de ruta para todas
las acciones
Los parámetros req, res y
next con expuestos por
express
Controladores
'use strict';
/**
*
*
* @Route("/example")
*/
class MiControlador extends R.Controller {
configure() {
}
/**
*
* @Route("/holaruta",method="all")
*
*/
holaRuta(req, res, next) {
res.send('hola ruta')
}
}
module.exports = MiControlador;
http://localhost/example/holaruta
Inyector de dependencias
($injector)
Los objetos, clases y funciones utilitarias, son
registradas en el contenedor de dependencias del
inyector con el fin de hacerlos accesibles desde
cualquier parte de nuestra aplicación.
Su concepción estuvo basada en el popular inyector
propuesto por AngularJS aunque existen patrones bien
definidos sobre esta técnica.
Inyector de dependencias
($injector)
El core de Raptor.js configura el inyector a través del
objeto global $injector, significa que estará accesible
desde cualquier lugar y en cualquier momento de
ejecución del framework
var persona=new Persona();
$injector("ObjetoPersona",persona);
Inyector de dependencias
($injector)
Existen 2 formas fundamentales de consumir la instancia
registrada, directa y por inyección
Forma directa:
var persona=$injector("ObjetoPersona")
persona.nombre()
Inyector de dependencias
($injector)
Por inyección:
$injector.invoke(function(ObjetoPersona){
ObjetoPersona.nombre()
})
$injector.invokeLater(function(ObjetoPersona){
ObjetoPersona.nombre()
})
Resolución de dependencias
(clase principal del componente)
Raptor.js implementa internamente la resolución de
dependencias en los métodos configure y middleware
de la clase principal index del componente.
class exampleNode {
middleware(SecurityRegistry, Bio, ngPortalRegistry, router){
//Se pueden inyectar acá todas las dependencias
//registradas en el contenedor
router.post("/api/v2",function(){})
}
Resolución de dependencias
(Controladores)
Así como en cada acción de los controladores que
definan una ruta.
/**
* Pueden ser inyectadas las dependencias requeridas
* a continuación de req,res,next
*
* @Route("/holaruta",method="all")
*
*/
holaRuta(req, res, next, SecurityRegistry, Op, sequelize) {
/**
* Las inyecciones de dependecias Op, sequelize
* solo estarán disponibles si existe una conexión
* exitosa con
* una base de datos
*/
res.send('hola ruta')
}
Dependencias por defecto
router: Referencia al enrutador de express
express: Referencia a la app express creada por Raptor.js
Events: Objeto para el registro de escuchas de eventos en
Raptor.js.
Options: Objeto que contiene la configuración establecida en
el archivo options.json.
Bundles: Objeto con la representación de todos los
componentes Raptor.js reconocidos por el core.
Gestión de eventos
El core de Raptor.js extiende de EventEmitter y permite la
subscripción a eventos lanzados por el core, a pesar de
esto es el objeto Events registrado en el contenedor de
dependencias el encargado de ofrecer una API para dicha
tarea.
Por regla general son utilizados en mayor parte en la
realización de introspección, cambio del comportamiento
por defecto del framework, inserción de middlewares en el
stack, etc.
Gestión de eventos
En el método configure de la clase principal de nuestro
componente podemos inyectar el objeto Events y
suscribirnos a eventos.
configure(R, Events){
Events.register({
'sendresponse':function(){
},
'session:config':function(){
}
})
}
Gestión de eventos
Teniendo en cuenta que el core de Raptor extiende de
EventEmitter podemos además enviar nuestros propios
eventos personalizados lanzados desde nuestros
componentes a través del uso de la función emit del core.
configure(R, Events){
Events.register({
'exampleNode.configured':function(param){
console.log(param)
}
})
R.emit("exampleNode.configured","hola mundo")
}
ViewPlugins
Permite la inyección de contenido en los hotpots
declarados en el sistema para determinados patrones de
ruta. Es un mecanismo útil en la realización de
introspección en la capa de presentación.
La funcionalidad de ViewPlugin puede ser encontrada
definida dentro del request de la petición actual, este
objeto contiene un grupo de funciones para el manejo de
este concepto.
req
.viewPlugin
.set('after_response_body','<script>alert("hola mundo")</script>')
Componentes utilitarios
@raptorjs/core, es el núcleo de la aplicación, contiene toda la
lógica arquitectónica del framework
@raptorjs/extjs, contiene las bibliotecas de extjs así como
herramientas para la compresión en tiempo real
@raptorjs/troodon, componente de seguridad, implementa los
procesos de seguridad
@raptorjs/bio, capa biométrica de reconocimiento de usuario
por patrón de tecleo
@raptorjs/orm, contiene la lógica de configuración del ORM
Sequelize
Componentes utilitarios
@raptorjs/ng-portal, implementa un portal basado en
AngularJS que puede ser configurado y utilizado como
portal de integración de funcionalidades
Ejemplo
Utilizaremos el ejemplo TaxiNode publicado en el blog
para crear un pequeño portal para visualizar nuestro
contenido
Ejemplo
http://localhost:4440/raptor
Ejemplo
Componente TaxiNode creado
Creando un ngPortal
configure(R, Events) {
}
Se añade el parámetro Events para
inyectar esta dependencia
Creando un ngPortal
configure(R, Events) {
Events.register({
})
}
Se invoca al método register para
crear una subscripción a eventos
Creando un ngPortal
configure(R, Events) {
Events.register({
'ioc:ngPortal.ready': $i.later(function() {
})
})
}
Escuchamos el evento de registro
en el contenedor de dependencias
para la clase ngPortal
$i es el atajo de $injector, later es el
atajo de invokeLater
Creando un ngPortal
configure(R, Events) {
Events.register({
'ioc:ngPortal.ready': $i.later(function(ngPortal,
ngPortalRegistry) {
})
})
}
Inyectamos la clase ngPortal y
ngPortalRegistry
Creando un ngPortal
configure(R, Events) {
Events.register({
'ioc:ngPortal.ready': $i.later(function(ngPortal,
ngPortalRegistry) {
var portal = new ngPortal('taxi');
})
})
}
Creamos un instancia de ngPortal
Creando un ngPortal
configure(R, Events) {
Events.register({
'ioc:ngPortal.ready': $i.later(function(ngPortal,
ngPortalRegistry) {
//Creamos una instancia de ngPortal
var portal = new ngPortal('taxi');
portal.config(function () {
this.viewPlugin('name', 'App Taxi')
})
})
Se configura un nombre en el punto
caliente name
Creando un ngPortal
configure(R, Events) {
Events.register({
'ioc:ngPortal.ready': $i.later(function(ngPortal,
ngPortalRegistry) {
//Creamos una instancia de ngPortal
var portal = new ngPortal('taxi');
portal.config(function () {
this.viewPlugin('name', 'App Taxi')
})
//Se adiciona en el registro el portal creado
ngPortalRegistry.set(portal);
})
Adicionamos el portal al registro
global de portales creados
Creando un ngPortal
http://localhost:4440/taxi/home
Plataformas en Raptor.js
Plataformas en Raptor.js
Plataformas en Raptor.js
Curso introductorio a
Raptor.js

Más contenido relacionado

PDF
J2me
ODP
Gestionando servidores con Puppet
PDF
Curso puppet lenguaje_2
PPT
spring
PDF
Presentacion web2py
PDF
[ES] Introducción a las Aplicaciones Web con Java
PDF
Frameworks J2EE
J2me
Gestionando servidores con Puppet
Curso puppet lenguaje_2
spring
Presentacion web2py
[ES] Introducción a las Aplicaciones Web con Java
Frameworks J2EE

La actualidad más candente (19)

PDF
Semana 1 Introducción a Java
PPTX
FROM lost to the Docker 2020
DOCX
Lenguajes de programas
PDF
Metacoretex
PDF
Java Primeros Pasos Revista- Edición 2
PDF
Integración de aplicaciones Java
PPT
Introducción a Java y BEA (2008)
PDF
Web services y java
PDF
2. Java Servlets (J2EE) - Curso 2005-2006
PDF
5. Curso Java Struts I (Framework para Java) - Curso 2005-2006
PDF
Aplicaciones web con jakarta struts - Javier Oliver Fulguera
PDF
Introducción al desarrollo de aplicaciones web en Java
PDF
Breve introducción a Apache Ant
PDF
Curso Java Resumen - Curso 2005-2006
PDF
Programacion web java
PDF
[ES] Introdución a la plataforma java
PPTX
PostgreSQL
PPTX
Presentacion Java
PDF
Introducción a JEE
Semana 1 Introducción a Java
FROM lost to the Docker 2020
Lenguajes de programas
Metacoretex
Java Primeros Pasos Revista- Edición 2
Integración de aplicaciones Java
Introducción a Java y BEA (2008)
Web services y java
2. Java Servlets (J2EE) - Curso 2005-2006
5. Curso Java Struts I (Framework para Java) - Curso 2005-2006
Aplicaciones web con jakarta struts - Javier Oliver Fulguera
Introducción al desarrollo de aplicaciones web en Java
Breve introducción a Apache Ant
Curso Java Resumen - Curso 2005-2006
Programacion web java
[ES] Introdución a la plataforma java
PostgreSQL
Presentacion Java
Introducción a JEE
Publicidad

Similar a Curso introductorio a Raptor.js con Node.js (20)

PPT
Node js Alt.net Hispano
PDF
Desarrollo web en Nodejs con Pillars por Chelo Quilón
PDF
node-js-es.19.pdf
DOCX
Clase 5 07_pasando de php a node_js
PPTX
Node.js - un poco de informacion.
PPTX
Introduccion a Nodejs
PDF
Creando una API Rest con Node.js y MongoDB
PDF
Rompiendo paradigmas
PPTX
Introduccion a Node.js
PDF
Node js mongo crud tareas
PDF
Libro de programación Angular+TypeScripr
PPTX
19 javascript servidor
PDF
Curso node.js
DOCX
Introduccion a-nodejs
PPTX
Archivo power
PDF
APIs REST con NodeJS y MongoDB
PPTX
Introduccion a Node.js
PDF
Microservicios sobre MEAN Stack
PDF
Opensouthcode: Microservicios sobre MEAN Stack
ODP
Node.js - Eventos para Todos
Node js Alt.net Hispano
Desarrollo web en Nodejs con Pillars por Chelo Quilón
node-js-es.19.pdf
Clase 5 07_pasando de php a node_js
Node.js - un poco de informacion.
Introduccion a Nodejs
Creando una API Rest con Node.js y MongoDB
Rompiendo paradigmas
Introduccion a Node.js
Node js mongo crud tareas
Libro de programación Angular+TypeScripr
19 javascript servidor
Curso node.js
Introduccion a-nodejs
Archivo power
APIs REST con NodeJS y MongoDB
Introduccion a Node.js
Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN Stack
Node.js - Eventos para Todos
Publicidad

Último (9)

PDF
Presentacion de compiladores e interpretes
PPTX
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
PDF
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
PPTX
hojas_de_calculo_aplicado para microsoft office
PPTX
presentación de introducción a las metodologías agiles .pptx
PPTX
PROPIEDADES Y METODOS DE PrOO CON PYTHON
PPTX
Control de seguridad en los sitios web.pptx
PDF
DNS_SERVIDORES PARA ASER PRACTICAS EN REDES
PPTX
Implementación equipo monitor12.08.25.pptx
Presentacion de compiladores e interpretes
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
hojas_de_calculo_aplicado para microsoft office
presentación de introducción a las metodologías agiles .pptx
PROPIEDADES Y METODOS DE PrOO CON PYTHON
Control de seguridad en los sitios web.pptx
DNS_SERVIDORES PARA ASER PRACTICAS EN REDES
Implementación equipo monitor12.08.25.pptx

Curso introductorio a Raptor.js con Node.js

  • 2. • Introducción al entorno Node.js • Formato CommonJS • Estructura de paquetes y NPM • Marco de trabajo Raptor.js • Objetivo características e instalación • Estructura de un proyecto Raptor.js • Estructura de componentes Sumario
  • 3. • Manifiesto de instalación de un componente • Clase principal del componente • Middlewares y controladores • Inyector de dependencias • Gestión de eventos del core • Introducción al ejemplo TaxiNode Sumario
  • 4. Proyecto Raptor Nace en junio de 2014, como una idea para crear tecnologías base para el desarrollo de aplicaciones web, siguiendo estándares de seguridad y de optimizar los procesos de desarrollo….
  • 5. Colaboradores William Amed GDAI Las Tunas Jorge Carmenate Geocom SA Uruguay Jorge Miralles Mercado Libre Uruguay Roberto García UIC Las Tunas Pedro Abreu GDAI Las Tunas Ricardo Suárez Productor Adriano DJ Cuba
  • 6. “Node.js es una plataforma construida encima del entorno de ejecución javascript de Chrome para fácilmente construir rápidas, escalables aplicaciones de red. Node.js usa un modelo de E/S no bloqueante dirigido por eventos que lo hace ligero y eficiente, perfecto para aplicaciones data-intensive en tiempo real”
  • 7. Node fue galardonado en 2012 con el premio “Tecnología del Año” por la revista InfoWorld
  • 8. • Orientado a eventos asíncronos • No existen bloqueos de proceso • Ideal para construir aplicaciones de red escalables • Utiliza la especificación EICMAScript Características
  • 9. El NPM (Node Package Manager) es el gestor de paquetes oficial para Node.js y proporciona las herramientas necesarias para la instalación de paquetes en proyecto de Node.js Gestor de paquetes
  • 10. Al instalar Node.js es instalado además el gestor de paquetes NPM y ambos pueden ser verificados en la terminal de nuestro equipo Instalación
  • 12. Hola mundo Archivo hola.js ---- console.log("Hola mundo Node.js")
  • 13. Hola mundo En la terminal especificaremos el comando:
  • 14. Node soporta e implementa el sistema que CommonJS define para la gestión de módulos, lo cual es importante no sólo a la hora de organizar el código sino a la hora de asegurar que se ejecuta sin interferir en el código de los demás módulos aislándolos unos de otros de tal manera que no haya conflicto entre, por ejemplo, funciones o variables con el mismo nombre. A esto se le conoce como scope isolation. Formato CommonJS
  • 15. 1. Uso de la función require() para indicar que queremos emplear una determinada librería pasándole el identificador de la librería (su nombre) como parámetro. Formato CommonJS
  • 16. 2. La existencia de la variable exports dentro de los módulos. Esta variable es un objeto que es el único modo posible que tiene un módulo de hacer públicas funciones y demás objetos, añadiéndolas a exports conforme se ejecuta el código de dicho módulo. Formato CommonJS
  • 17. 3. La definición dentro de un módulo de la variable module. Esta variable es un objeto con la propiedad obligatoria id que identifica unívocamente al módulo y por tanto, se obtiene de él el exports que interese al desarrollador. Formato CommonJS
  • 18. Archivo circulo.js ---- Ejemplo CommonJS var PI = 3.14; module.exports.area = function (r) { return PI * r * r; }; module.exports.circumference = function (r) { return 2 * PI * r; };
  • 19. Archivo hola.js ---- Ejemplo CommonJS var circulo=require("./circulo"); var area=circulo.area(50); console.log("El area es:",area)
  • 20. Estructura de paquete Un paquete de Node es definido a través de un archivo package.json, además contará opcionalmente con un directorio node_modules en caso de contener dependencias.
  • 21. package.json El archivo package.json describe al paquete a través de un conjunto de directivas de instalación, se especificará de forma obligatoria los atributos name y version. En el directorio actual puede ser creado un paquete de forma interactiva a través del comando. npm init
  • 22. Archivo package.json ---- package.json { "name": "mipaquete", "version": "1.0.1", "description": "una descripción", "main": "index.js", "author": "Jhon Doe", "license": "MIT", "dependencies": { "fs-extra": "1.2.2" } }
  • 23. node_modules El directorio node_modules lo encontraremos con frecuencia en los paquetes de Node, en este se ubicarán todas las dependencias especificadas en el archivo package.json.
  • 24. Instalación de un paquete Uno de los comandos más utilizados en el gestor de paquetes es sin duda install, que proporciona una forma rápida de instalación de paquetes desde el repositorio npmregistry. npm install fs-extra -g npm install fs-extra --save
  • 25. Instalación de un paquete -g esta directiva instalará en forma global el paquete especificado. --save instalará el paquete especificado en el directorio node_modules del paquete que invoca la operación de instalación.
  • 26. Tiene capacidad de manejar un alto número de conexiones y procesar un enorme número de operaciones de Entrada/Salida muy rápidamente. • Interfaces ligeros REST/JSON • Aplicaciones monopágina • Datos por streaming • Comunicación Resumen
  • 27. Es un framework full stack para el desarrollo de aplicaciones web, incluye componentes que garantizan un marco de abstracción para la seguridad y utilitarios que siguen el principio de desarrollo ágil con baja carga cognitiva.
  • 28. A principios de 2018 se crea la rama para Node.js denominada Raptor.js y que apuesta por el futuro de las tecnologías en el desarrollo web, la serie 1 de Raptor.js es lanzada ese mismo año.
  • 29. • Reducir la carga cognitiva y costos de desarrollo • Garantizar los procesos y modelos de seguridad establecidos • Componentes de comunicación para aplicaciones en tiempo real • Soporte a modelos de alta concurrencia de eventos Objetivo
  • 31. Componente de seguridad, implementación de un MCA basado en estructuras Características - autenticación, autorización y auditoria. - Extensión del modelo de control de acceso basado en roles hacia un enfoque estructurado. - Granularidad en la gestión de privilegios, se crea el concepto acciones.
  • 32. Componente biométrico de reconocimiento de usuarios Características
  • 35. Raptor.js está disponible como paquete en el npm y para la creación de un proyecto es necesario la instalación de la herramienta de desarrollo raptor-cli que te asistirá para este propósito. Instalación npm install raptor-cli -g
  • 36. El cli de Raptor.js es una herramienta utilitaria de consola para ambientes de desarrollo, permite la creación de proyectos Raptor.js-v2 así como la ejecución en modo de desarrollo de la aplicación. Herramienta raptor-cli rap -h rap create <nombre> //versión del cli //crear proyecto rap run //ejecutar proyecto
  • 37. Un proyecto es la base donde se desarrolla nuestra aplicación, consta de la configuración y los componentes creados. Nuevo proyecto Raptor.js options.json options.prod.json package.json //componentes del directorio src //desarrollo //producción
  • 38. Estructura del proyecto options.json options.prod.json package.json //descripción del componente y dependencias //configuración de desarrollo //configuración de producción config public src run.app.js bootstrap.js //componentes con nuestro código fuente //entrada de desarrollo //entrada al core al framework //directorio público, recursos web para JS, CSS //contiene la configuración del proyecto
  • 39. { "mode": "development", "database": { "state": "on", "options": { "port": 3306, "dialect": "mysql", "host": "127.0.0.1" }, "api": true, "password": "root", "user": "root", "name": "raptorjs" }, "port": 4440, "socketio":{…}, "language":{…}, "secret": "3dfa5h2g$ae946e2gdi5cb%g*1#$5e25", "proyectName": "RaptorJS" } Configuración (options.json) Modo en que corre el proyecto Esta configuración es utilizada por el componente orm y configura la conexión para el ORM Sequelize Puerto en que escuchará el proyecto
  • 40. { "mode": "development", "database": {…}, "port": 4440, "socketio":{…}, "language":{…}, "secret": "3dfa5h2g$ae946e2gdi5cb%g*1#$5e25", "proyectName": "RaptorJS" } Configuración (options.json) Llave secreta para la generación de tokens de seguridad Determina si la tecnología socket.io estará activa Nombre del proyecto
  • 41. Configuración (options.json) { "database": {…}, "port": 4440, "socketio": {…}, "language": {…}, "secret": "3dfa5h2g$ae946e2gdi5cb%g*1#$5e25", "proyectName": "RaptorJS", "scopes":["@raptorjs","@micope"], "publish":{ "bootstrap":"dist", "jquery":"" }, "maxEventListeners":80 } Escanea en node_modules los scopes para encontrar componentes Raptor.js Expone a través de express los paquetes de node_modules especificados. Se publica bajo el prefijo /public Cantidad máxima de susbcripciones que soportará el core de Raptor.js, por defecto el valor es 80.
  • 42. Componente Raptor.js DefaultController.js package.json //plantillas Ejs del componente //contiene los modelos de nuestro componente //repositorios del componente Controllers Models Repositories manifest.json index.js //recursos públicos a ser expuestos por express //clase principal del componente //manifiesto de instalación //contiene el archivo language.json //ejemplo de controlador i18n Resources Views Los componentes están ubicados en el directorio src en un agrupador
  • 43. Manifiesto de instalación { "state": false, "name": "TroodonNode", "author":"William Amed - watamayo90@gmail.com", "description":"Descripción del componente", "version": "1.0.1", "require":{ "RaptorNode":">=1.0.1" } } Determina si el componente estará activo Nombre del componente, deberá coincidir con el directorio que lo contiene El atributo require determina si este componente dependerá en funcionamiento de otro componente Raptor.js
  • 44. 'use strict'; /** * * * @Route("/example") */ class exampleNode { middleware(){ } configure(R){ } } module.exports=exampleNode Entrada principal index.js Configurador de midlewares del componente Configura el componente en el momento de su reconocimiento ante el core de Raptor.js Prefijo de ruta de este componente
  • 45. Entrada principal index.js El prefijo de ruta del componente sirve como forma de agrupación de las rutas que se registren en este propio componente, si se establece significa que todas las rutas declaradas en los controladores dentro del componente tomarán como prefijo el establecido en esta clase. Prefijo de ruta
  • 46. Express y middlewares Raptor.js utiliza Express como marco de aplicación web o marco de servidor estándar para encargarse del manejo del direccionamiento web y provee todas las funciones básicas del manejo del protocolo http. Express se basa en el patrón middleware para crear un stack que encarga de interactuar con la petición actual. Raptor.js configura todos estos conceptos por nosotros y solo debemos preocuparnos de definir nuestros patrones de ruta.
  • 49. Express y middlewares middleware(express, router){ // Registro de un patrón de ruta directamente // en el enrutador router.all("/user/list",function(req,res,next){ res.send(“hola mundo”) }) } http://miproyecto.cu/user/list Ruta definida Responde “hola mundo”
  • 50. Express y middlewares middleware(express, router){ express.use(function(err,req,res,next){ /** * Si se define el parámetro err * el middleware es ejecutado cuando * exista un error en los middlewares * superiores del stack */ console.log(err) }) }
  • 51. Controladores 'use strict'; /** * prefijo de ruta todas las definiciones en el controlador * * @Route("/example") */ class MiControlador extends R.Controller { configure() { } /** * * @Route("/holaruta",method="all") * */ holaRuta(req, res, next) { res.send('hola ruta') } } module.exports = MiControlador; Anotación Route define un patrón de ruta utilizado por express Prefijo de ruta para todas las acciones Los parámetros req, res y next con expuestos por express
  • 52. Controladores 'use strict'; /** * * * @Route("/example") */ class MiControlador extends R.Controller { configure() { } /** * * @Route("/holaruta",method="all") * */ holaRuta(req, res, next) { res.send('hola ruta') } } module.exports = MiControlador; http://localhost/example/holaruta
  • 53. Inyector de dependencias ($injector) Los objetos, clases y funciones utilitarias, son registradas en el contenedor de dependencias del inyector con el fin de hacerlos accesibles desde cualquier parte de nuestra aplicación. Su concepción estuvo basada en el popular inyector propuesto por AngularJS aunque existen patrones bien definidos sobre esta técnica.
  • 54. Inyector de dependencias ($injector) El core de Raptor.js configura el inyector a través del objeto global $injector, significa que estará accesible desde cualquier lugar y en cualquier momento de ejecución del framework var persona=new Persona(); $injector("ObjetoPersona",persona);
  • 55. Inyector de dependencias ($injector) Existen 2 formas fundamentales de consumir la instancia registrada, directa y por inyección Forma directa: var persona=$injector("ObjetoPersona") persona.nombre()
  • 56. Inyector de dependencias ($injector) Por inyección: $injector.invoke(function(ObjetoPersona){ ObjetoPersona.nombre() }) $injector.invokeLater(function(ObjetoPersona){ ObjetoPersona.nombre() })
  • 57. Resolución de dependencias (clase principal del componente) Raptor.js implementa internamente la resolución de dependencias en los métodos configure y middleware de la clase principal index del componente. class exampleNode { middleware(SecurityRegistry, Bio, ngPortalRegistry, router){ //Se pueden inyectar acá todas las dependencias //registradas en el contenedor router.post("/api/v2",function(){}) }
  • 58. Resolución de dependencias (Controladores) Así como en cada acción de los controladores que definan una ruta. /** * Pueden ser inyectadas las dependencias requeridas * a continuación de req,res,next * * @Route("/holaruta",method="all") * */ holaRuta(req, res, next, SecurityRegistry, Op, sequelize) { /** * Las inyecciones de dependecias Op, sequelize * solo estarán disponibles si existe una conexión * exitosa con * una base de datos */ res.send('hola ruta') }
  • 59. Dependencias por defecto router: Referencia al enrutador de express express: Referencia a la app express creada por Raptor.js Events: Objeto para el registro de escuchas de eventos en Raptor.js. Options: Objeto que contiene la configuración establecida en el archivo options.json. Bundles: Objeto con la representación de todos los componentes Raptor.js reconocidos por el core.
  • 60. Gestión de eventos El core de Raptor.js extiende de EventEmitter y permite la subscripción a eventos lanzados por el core, a pesar de esto es el objeto Events registrado en el contenedor de dependencias el encargado de ofrecer una API para dicha tarea. Por regla general son utilizados en mayor parte en la realización de introspección, cambio del comportamiento por defecto del framework, inserción de middlewares en el stack, etc.
  • 61. Gestión de eventos En el método configure de la clase principal de nuestro componente podemos inyectar el objeto Events y suscribirnos a eventos. configure(R, Events){ Events.register({ 'sendresponse':function(){ }, 'session:config':function(){ } }) }
  • 62. Gestión de eventos Teniendo en cuenta que el core de Raptor extiende de EventEmitter podemos además enviar nuestros propios eventos personalizados lanzados desde nuestros componentes a través del uso de la función emit del core. configure(R, Events){ Events.register({ 'exampleNode.configured':function(param){ console.log(param) } }) R.emit("exampleNode.configured","hola mundo") }
  • 63. ViewPlugins Permite la inyección de contenido en los hotpots declarados en el sistema para determinados patrones de ruta. Es un mecanismo útil en la realización de introspección en la capa de presentación. La funcionalidad de ViewPlugin puede ser encontrada definida dentro del request de la petición actual, este objeto contiene un grupo de funciones para el manejo de este concepto. req .viewPlugin .set('after_response_body','<script>alert("hola mundo")</script>')
  • 64. Componentes utilitarios @raptorjs/core, es el núcleo de la aplicación, contiene toda la lógica arquitectónica del framework @raptorjs/extjs, contiene las bibliotecas de extjs así como herramientas para la compresión en tiempo real @raptorjs/troodon, componente de seguridad, implementa los procesos de seguridad @raptorjs/bio, capa biométrica de reconocimiento de usuario por patrón de tecleo @raptorjs/orm, contiene la lógica de configuración del ORM Sequelize
  • 65. Componentes utilitarios @raptorjs/ng-portal, implementa un portal basado en AngularJS que puede ser configurado y utilizado como portal de integración de funcionalidades
  • 66. Ejemplo Utilizaremos el ejemplo TaxiNode publicado en el blog para crear un pequeño portal para visualizar nuestro contenido
  • 69. Creando un ngPortal configure(R, Events) { } Se añade el parámetro Events para inyectar esta dependencia
  • 70. Creando un ngPortal configure(R, Events) { Events.register({ }) } Se invoca al método register para crear una subscripción a eventos
  • 71. Creando un ngPortal configure(R, Events) { Events.register({ 'ioc:ngPortal.ready': $i.later(function() { }) }) } Escuchamos el evento de registro en el contenedor de dependencias para la clase ngPortal $i es el atajo de $injector, later es el atajo de invokeLater
  • 72. Creando un ngPortal configure(R, Events) { Events.register({ 'ioc:ngPortal.ready': $i.later(function(ngPortal, ngPortalRegistry) { }) }) } Inyectamos la clase ngPortal y ngPortalRegistry
  • 73. Creando un ngPortal configure(R, Events) { Events.register({ 'ioc:ngPortal.ready': $i.later(function(ngPortal, ngPortalRegistry) { var portal = new ngPortal('taxi'); }) }) } Creamos un instancia de ngPortal
  • 74. Creando un ngPortal configure(R, Events) { Events.register({ 'ioc:ngPortal.ready': $i.later(function(ngPortal, ngPortalRegistry) { //Creamos una instancia de ngPortal var portal = new ngPortal('taxi'); portal.config(function () { this.viewPlugin('name', 'App Taxi') }) }) Se configura un nombre en el punto caliente name
  • 75. Creando un ngPortal configure(R, Events) { Events.register({ 'ioc:ngPortal.ready': $i.later(function(ngPortal, ngPortalRegistry) { //Creamos una instancia de ngPortal var portal = new ngPortal('taxi'); portal.config(function () { this.viewPlugin('name', 'App Taxi') }) //Se adiciona en el registro el portal creado ngPortalRegistry.set(portal); }) Adicionamos el portal al registro global de portales creados