Taller Javascript
Taller Javascript
(express, handlebars)
Un nodo en el DOM es cualquier etiqueta del cuerpo, como un párrafo, el mismo body o incluso
las etiquetas de una lista. Con Javascript podemos modificar estas etiquetas con el uso de eventos.
2. Qués es NPM:
De sus siglas NPM (Node Package Manager) es un gestor de paquetes desarrollado en su totalidad
bajo el lenguaje JavaScript por Isaac Schlueter, a través del cual podemos obtener cualquier
librería con tan solo una sencilla línea de código, lo cual nos permitirá agregar dependencias de
forma simple, distribuir paquetes y administrar eficazmente tanto los módulos como el proyecto a
desarrollar en general.
Así mismo, es de gran importancia mencionar que Node.JS desde su versión 0.6.3 se instala
automáticamente desde el entorno NPM, permitiendo a los desarrolladores instalar aplicaciones
Node que se encuentren en el repositorio. En este mismo orden de ideas, cabe destacar que al
instalar paquetes nuevos estos serán almacenados localmente en la carpeta que lleva por nombre
“node_modules” dentro de nuestro proyecto (esto se lleva a cabo por defecto) sin embargo el
desarrollador puede indicarle a NPM que instale dicho paquete de forma global, según lo
considere necesario.
Las bibliotecas JavaScript son instrucciones de código reutilizables por medio de las que se asignan
características y funciones (por ejemplo, para una página web). jQuery es la más conocida y esta
ofrece numerosas y valiosas funciones, aunque también hay otras que pueden ser de utilidad.
jQuery
jQuery es la más utilizada de todas las librerías JavaScript. Esto se debe, entre otras razones, a que
posibilita la escritura de código jQuery en cualquier tipo de navegador y que para ello existen
numerosos plugins. La librería de código abierto está incluida en numerosos sistemas de gestión
de contenidos como WordPress, Drupal o Joomla!. jQuery se utiliza sobre todo como una práctica
interfaz de DOM y ofrece numerosas funciones: los selectores de CSS3 permiten seleccionar y
manipular fácilmente los elementos de las páginas web, pero jQuery resulta especialmente
popular debido a la posibilidad de integrar las consultas realizadas con Ajax (solicitudes HTTP que
no requieren volver a cargar la página web).
jQuery UI
jQuery UI, cuya terminación UI hace referencia a las siglas en inglés para User Interface (interfaz
de usuario), es una extensión gratuita para jQuery que se emplea para diseñar y crear interfaces
de usuario, como por ejemplo de páginas o aplicaciones web. Lo esencial de esta biblioteca de
componentes es que con ella se pueden generar efectos e interacciones muy fácilmente. Entre las
funciones de jQuery UI se encuentra la creación de opciones para la interacción (drag and drop,
aumento y disminución de elementos web, etc.), de animaciones y efectos, así como de widgets
(como Autocomplete, Slider, Datepicker, etc.). Con el editor gráfico ThemeRoller se pueden crear
temas propios, aunque también se pueden utilizar y adaptar otros que ya estén disponibles.
También ofrece la posibilidad de implementar los componentes necesarios por medio del diseño
modular.
Dojo Toolkit
Dojo Toolkit está diseñado para realizar aplicaciones web y contenidos web dinámicos. Como una
de las bibliotecas de JavaScript más antiguas que todavía sigue teniendo relevancia en el
mercadoofrece gran cantidad de funciones adicionales. Sus componentes más importantes son
Dojo, el programa principal, y Dijit, un módulo para interfaces gráficas de usuario que permite
incorporar elementos en la página con ayuda de widgets predefinidos. Dojo puede utilizarse con el
DOM y con Ajax.
React
React fue utilizada por primera vez en 2011 en el newsfeed de Facebook. En 2013 se publicó como
una librería JavaScript de código abierto para crear interfaces de usuario. Lo característico de
React es que no solo se puede utilizar en clientes de páginas web, sino también en el servidor o
durante el desarrollo de aplicaciones. Esto se atribuye al uso de un DOM virtual, lo que también
facilita el análisis de aplicaciones web. Asimismo, esta biblioteca de JavaScript destaca también
por el one direction data flow (flujo de datos en una dirección): esta técnica proporciona un código
estable en el que los cambios en el código jerárquicamente inferior no pueden influir en el
superior. Así, los cambios solo pueden tener efecto en la dirección opuesta.
Zepto
Zepto es una librería JavaScript muy liviana: mientras que jQuery convence, sobre todo, por su
funcionalidad, esto mismo es lo que intimida a muchos desarrolladores, y es que dicha biblioteca
de JavaScript puede resultar muy compleja. La minimalista Zepto es mucho más ligera, por lo que
se carga más rápido y ocupa menos espacio, pudiendo integrarse así en aplicaciones móviles. Para
que el volumen de archivos sea mínimo, Zepto reduce, por ejemplo, la compatibilidad con los
navegadores más antiguos. Asimismo, para permitir el uso de Ajax y de animaciones, se debe
recurrir a módulos adicionales.
CreateJS
No una única biblioteca, sino varias: CreateJS es una suite compuesta por cuatro bibliotecas
diferentes: EaselJS (gráficos e interactividad), TweenJS (animaciones), SoundJS (audio) y PreloadJS
(preloading). No existe dependencia entre ellas, lo que significa que no es necesario implementar
las cuatro en un mismo proyecto cuando solo se necesita una. Además, se ofrecen algunas
herramientas para simplificar el trabajo con las librerías de JavaScript. El foco de atención es el
desarrollo de aplicaciones HTML5 y Flash. En general, el equipo de CreateJS trabaja estrechamente
con Adobe, por lo que también hay herramientas que garantizan la colaboración fluida de la suite
con los productos de Adobe.
AngularJS
El framework creado por Google tiene, con diferencia, la mayor comunidad entre los frameworks
JavaScript. AngularJS se utiliza para crear aplicaciones web de una sola página (aplicaciones web
que constan de un solo documento HTML), al igual hace su principal competidor, este es, la
biblioteca de Facebook React. A causa del patrónMVVM (Model-View-ViewModel), se pueden
desarrollar aplicaciones web especializadas en la interacción con los usuarios. Los proveedores de
este framework JS, no obstante, definen a AngularJS más bien, en parte en broma, como un
modelo MVW o Model-View-Whatever, es decir, modelo-vista-lo que sea. La renderización de la
aplicación se lleva a cabo, en este caso, del lado del cliente. El framework está basado en jQuery
Lite, una versión reducida de jQuery.
Angular
Ember.js
Ember.js también es un framework del lado del cliente con el que se pueden crear aplicaciones
web de una sola página y aplicaciones de escritorio. Uno de sus rasgos distintivos con respecto a
AngularJS es que los creadores de Ember.js han incluido a la comunidad de una manera más
intensiva en el proceso de desarrollo del framework y que los cambios importantes realizados en
el framework se discuten en dicha comunidad antes de ser ejecutados. Ember.js se comercializa
como un framework con el que se pueden desarrollar aplicaciones web ambiciosas, por lo que está
orientado, en primer lugar, a desarrolladores que ya tienen cierta experiencia en la creación de
aplicaciones web.
Vue.js
Vue.js es, asimismo, un framework de JavaScript para el desarrollo de aplicaciones web de una
sola página que recuerda a Angular y React. Los desarrolladores de este proyecto relativamente
reciente han diseñado Vue.js de tal manera que iniciarse con él sea relativamente sencillo. Así es
posible, por ejemplo, integrar plantillas en HTML. Asimismo, Vue.js es mucho más flexible que
otros frameworks que normalmente prescriben de una forma un tanto rígida cómo utilizar el
framework.
Meteor
JavaScript no puede conectarse directamente a la base de datos para obtener los datos
necesarios, pero puede usar AJAX. Para facilitar AJAX solicitud al servidor, puede usar jQuery JS
framework http://jquery.com . Aquí hay un pequeño ejemplo.
JS:
jQuery.ajax({
type: "GET",
dataType: "json",
url: '/ajax/usergroups/filters.php',
data: "controller=" + controller + "&view=" + view,
success: function(json)
{
alert(json.first);
alert(json.second);
});
PHP:
$out = array();
$out['first'] = 'first value';
$out['second'] = 'second value';
echo json_encode($out);
Puede conectarse a MySQL desde Javascript a través de un applet de Java. El applet de Java
incrustaría el controlador JDBC para MySQL que le permitirá conectarse a MySQL.
Debe escribir un contenedor en PHP y luego exportar los datos devueltos (probablemente como
Json). NUNCA, obtenga de su "_GET" el código SQL, ya que esto se llama una inyección SQL (las
personas que aprendan esto tendrán el control total sobre su base de datos).
switch (@$_GET["cmd"]){
case 'data':
print getJsonData();
exit;
default:
print getMainScreen();
exit;
}
6. Cuál es la estructura de las carpetas para utilizar el framework express:
Express es el framework web más popular de Node, y es la librería subyacente para un gran
número de otros frameworks web de Node populares. Proporciona mecanismos para:
Escritura de manejadores de peticiones con diferentes verbos HTTP en diferentes caminos URL
(rutas).
Instalación:
Comenzaremos por el propio NodeJS
sudo apt-get install nodejs –y
Ahora instalamos el gestor de paquetes NPM (Node Package Manager), que nos permitirá instalar
aplicaciones basadas en NodeJS
sudo apt-get install npm
Creamos un directorio par albergar nuestra aplicación
mkdir expressAdictos
Lo mejor para comenzar a utilizar Express ya mismo es que empleemos un generador que nos va a
crear toda la estructura de directorios básica, con ficheros de demostración. Así, además
podremos ver la estructura básica de una aplicación Express y nos ahorraremos un buen trabajo.
Ejecutamos en un terminal para instalar el generador de la versión 4.X:
npm install -g express-generator@4
Ahora vamos a decirle al generador que genere la estructura en el directorio expressAdictos que
hemos creado.
express expressAdictos/
Así creará una serie de directorios y ficheros básicos para comenzar a trabajar con Express:
7. Cómo se implementa MVC en express:
El Modelo-Vista-Controlador
Como la mayoría de frameworks para el mundo web, Express permite desarrollar entre otros casos
el patrón Modelo-Vista-Controlador (MVC). Esto nos facilita mucho las cosas si estamos
acostumbrados a este patrón: Spring MVC, Struts, AngularJS…:
Vista: la representación para el usuario. Por ejemplo páginas Web (HTML) o JSON en REST.
Controlador: donde se realiza el procesamiento del modelo para dárselo «masticado» a la vista.
Contiene la lógica de negocio.
Vamos a ver parte por parte dónde se ubican, aunque mejor en el orden natural de una petición:
controlador, modelo y vista.
Ahora seguimos con la segunda parte de la aplicación, la configuración del servidor express. Pero
antes primero creamos en el config el archivo config.js con el siguiente contenido:
module.exports = {
name: 'Site',
domain: 'localhost',
url: 'http://localhost',
env: 'development',
port: 3000,
database: {
domain: 'localhost',
name: 'nameDb'
}
Simplemente es un archivo de configuración que que le indicamos algunos datos, como la base de
datos, el puerto, etc. Esto es necesario para luego poder configurar nuestro server express. Dentro
de la misma carpeta creamos el archivo set-config-express.js:
'use strict';
const path = require('path');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const express = require('express');
const exphbs = require('express-handlebars');
const methodOverride = require('method-override');
const session = require('express-session');
const mongoose = require('mongoose');
const MongoStore = require('connect-mongo')(session);
var expressConfig = function(app){
//Carga la configuración desde el archivo config.js
app.set('settings', require('./config'));
//Exporto la configuración para poder usarla en otras partes
app.locals.settings = app.get('settings');
// Configuro handlebars para los templates
app.engine('.hbs', exphbs({ layoutsDir: "app/views/layouts",
defaultLayout: 'main', extname: '.hbs' }));
// Seteo donde están las vistas
app.set('views', path.join(process.cwd(), 'app', 'views'));
app.set('view engine', '.hbs');
//Override with the X-HTTP-Method-Override header in the request
app.use(methodOverride('X-HTTP-Method-Override'));
//Cookies
app.use(cookieParser());
//Para menejar sessiones
app.use(session({
secret: 'supernova',
store: new MongoStore({ url: 'mongodb://' +
app.get('settings').database.domain + '/sessions', autoRemove:
'disabled'}),
resave: false,
saveUninitialized: false,
cookie: { maxAge: (24*3600*1000*30), expires: false}, // 30 Days in
ms
}));
//Indico donde estarán los archivos estáticos, en este caso public,
para que express puede acceder
app.use('/public', express.static(process.cwd() + '/public'));
//Indico donde están los paquetes de node_modules para que express
puede acceder
app.use('/node_modules', express.static(path.join(process.cwd() +
'/node_modules')));
//Indico donde están los paquetes de bower_components para que express
puede acceder
app.use('/bower_components', express.static(path.join(process.cwd(),
'/bower_components')));
//For the verbs HTTP get params
app.use(bodyParser.json()); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
extended: true
}));
//Me conecto a la base de datos
mongoose.connect('mongodb://' + app.get('settings').database.domain +
'/' + app.get('settings').database.name);
}
module.exports = expressConfig;
Una variable es un elemento que se emplea para almacenar y hacer referencia a otro valor.
Gracias a las variables es posible crear "programas genéricos", es decir, programas que funcionan
siempre igual independientemente de los valores concretos utilizados.
Si no existieran variables, un programa que suma dos números podría escribirse como:
resultado = 3 + 1
El programa anterior es tan poco útil que sólo sirve para el caso en el que el primer número de la
suma sea el 3 y el segundo número sea el 1. En cualquier otro caso, el programa obtiene un
resultado incorrecto.
Sin embargo, el programa se puede rehacer de la siguiente manera utilizando variables para
almacenar y referirse a cada número:
numero_1 = 3
numero_2 = 1
resultado = numero_1 + numero_2
Los elementos numero_1 y numero_2 son variables que almacenan los valores que utiliza el
programa. El resultado se calcula siempre en función del valor almacenado por las variables, por lo
que este programa funciona correctamente para cualquier par de números indicado. Si se modifica
el valor de las variables numero_1 y numero_2, el programa sigue funcionando correctamente.
Las variables en JavaScript se crean mediante la palabra reservada var. De esta forma, el ejemplo
anterior se puede realizar en JavaScript de la siguiente manera:
var numero_1 = 3;
var numero_2 = 1;
var resultado = numero_1 + numero_2;
La palabra reservada var solamente se debe indicar al definir por primera vez la variable, lo que se
denomina declarar una variable. Cuando se utilizan las variables en el resto de instrucciones del
script, solamente es necesario indicar su nombre. En otras palabras, en el ejemplo anterior sería
un error indicar lo siguiente:
var numero_1 = 3;
var numero_2 = 1;
var resultado = var numero_1 + var numero_2;
Si cuando se declara una variable se le asigna también un valor, se dice que la variable ha sido
inicializada. En JavaScript no es obligatorio inicializar las variables, ya que se pueden declarar por
una parte y asignarles un valor posteriormente. Por tanto, el ejemplo anterior se puede rehacer de
la siguiente manera:
var numero_1;
var numero_2;
numero_1 = 3;
numero_2 = 1;
Una de las características más sorprendentes de JavaSript para los programadores habituados a
otros lenguajes de programación es que tampoco es necesario declarar las variables. En otras
palabras, se pueden utilizar variables que no se han definido anteriormente mediante la palabra
reservada var. El ejemplo anterior también es correcto en JavaScript de la siguiente forma:
var numero_1 = 3;
var numero_2 = 1;
resultado = numero_1 + numero_2;
La variable resultado no está declarada, por lo que JavaScript crea una variable global (más
adelante se verán las diferencias entre variables locales y globales) y le asigna el valor
correspondiente. De la misma forma, también sería correcto el siguiente código:
numero_1 = 3;
numero_2 = 1;
resultado = numero_1 + numero_2;
En cualquier caso, se recomienda declarar todas las variables que se vayan a utilizar.
El nombre de una variable también se conoce como identificador y debe cumplir las siguientes
normas:
Sólo puede estar formado por letras, números y los símbolos $ (dólar) y _ (guión bajo).
El primer carácter no puede ser un número.
Por tanto, las siguientes variables tienen nombres correctos:
var $numero1;
var _$letra;
var $$$otroNumero;
var $_a__$4;
9. Tipos de variables:
Numéricas
Se utilizan para almacenar valores numéricos enteros (llamados integer en inglés) o decimales
(llamados float en inglés). En este caso, el valor se asigna indicando directamente el número
entero o decimal. Los números decimales utilizan el carácter . (punto) en vez de , (coma) para
separar la parte entera y la parte decimal:
Cadenas de texto
Se utilizan para almacenar caracteres, palabras y/o frases de texto. Para asignar el valor a la
variable, se encierra el valor entre comillas dobles o simples, para delimitar su comienzo y su final:
En ocasiones, el texto que se almacena en las variables no es tan sencillo. Si por ejemplo el propio
texto contiene comillas simples o dobles, la estrategia que se sigue es la de encerrar el texto con
las comillas (simples o dobles) que no utilice el texto:
No obstante, a veces las cadenas de texto contienen tanto comillas simples como dobles. Además,
existen otros caracteres que son difíciles de incluir en una variable de texto (tabulador, ENTER,
etc.) Para resolver estos problemas, JavaScript define un mecanismo para incluir de forma sencilla
caracteres especiales y problemáticos dentro de una cadena de texto.
De esta forma, el ejemplo anterior que contenía comillas simples y dobles dentro del texto se
puede rehacer de la siguiente forma:
Arrays
En ocasiones, a los arrays se les llama vectores, matrices e incluso arreglos. No obstante, el
término array es el más utilizado y es una palabra comúnmente aceptada en el entorno de la
programación.
Un array es una colección de variables, que pueden ser todas del mismo tipo o cada una de un tipo
diferente. Su utilidad se comprende mejor con un ejemplo sencillo: si una aplicación necesita
manejar los días de la semana, se podrían crear siete variables de tipo texto:
En este tipo de casos, se pueden agrupar todas las variables relacionadas en una colección de
variables o array. El ejemplo anterior se puede rehacer de la siguiente forma:
En el ejemplo anterior, la primera instrucción quiere obtener el primer elemento del array. Para
ello, se indica el nombre del array y entre corchetes la posición del elemento dentro del array.
Como se ha comentado, las posiciones se empiezan a contar en el 0, por lo que el primer elemento
ocupa la posición 0 y se accede a el mediante dias[0].
El valor dias[5] hace referencia al elemento que ocupa la sexta posición dentro del array dias.
Como las posiciones empiezan a contarse en 0, la posición 5 hace referencia al sexto elemento, en
este caso, el valor Sábado.
Booleanos
Las variables de tipo boolean o booleano también se conocen con el nombre de variables de tipo
lógico. Aunque para entender realmente su utilidad se debe estudiar la programación avanzada
con JavaScript del siguiente capítulo, su funcionamiento básico es muy sencillo.
Una variable de tipo boolean almacena un tipo especial de valor que solamente puede tomar dos
valores: true (verdadero) o false (falso). No se puede utilizar para almacenar números y tampoco
permite guardar cadenas de texto.
Los únicos valores que pueden almacenar estas variables son true y false, por lo que no pueden
utilizarse los valores verdadero y falso. A continuación se muestra un par de variables de tipo
booleano:
Tipos dinámicos
JavaScript es un lenguaje de tipado débil o dinámico. Esto significa que no es necesario declarar el
tipo de variable antes de usarla. El tipo será determinado automáticamente cuando el programa
comience a ser procesado. Esto también significa que puedes tener la misma variable con
diferentes tipos:
Tipos de datos
Tipo Null
El tipo Null tiene exactamente un valor: null. Consultar null y Null para más detalles.
Tipo Undefined
Una variable a la cual no se le haya asignado valor tiene entonces el valor undefined. Consultar
undefined y Undefined para más detalles.
Tipo Number
De acuerdo al standard ECMAScript, sólo existe un tipo numérico: el valor de doble precisión de
64-bits IEEE 754 (un número entre -(253 -1) y 253 -1). No existe un tipo específico para los
números enteros. Adicionalmente a ser capaz de representar números de coma flotante, el tipo
número tiene tres valores simbólicos: +Infinity, -Infinity, and NaN (Not A Number o No Es Un
Número).
Para chequear valores mayores o menores que +/-Infinity, puedes usar las constantes
Number.MAX_VALUE o Number.MIN_VALUE y comenzando con ECMAScript 6 también es posible
chequear si un número está en el rango de coma flotante de doble precisión usando
Number.isSafeInteger() así como Number.MAX_SAFE_INTEGER y Number.MIN_SAFE_INTEGER.
Fuera de este rango los números en javascript ya no son seguros de manipular.
El tipo número sólo tiene un valor entero que cuenta con dos representaciones: 0 es representado
como -0 y +0. ("0" es un alias +0). Esto casi no tiene ningún impacto. Por ejemplo +0 === -0 es true.
Sin embargo, es posible notar esto cuando se divide por cero:
> 42 / +0
Infinity
> 42 / -0
-Infinity
Tipo String
El tipo String de Javascript es usado para representar datos textuales o cadenas de caracteres. Es
un conjunto de "elementos", de valores enteros sin signo de 16 bits. Cada elemento ocupa una
posición en el String. El primer elemento está en el índice 0, el próximo está en el índice 1, y así
sucesivamente. La longitud de un String es el número de elementos en ella.
A diferencia de lenguajes como C, los strings en JavaScript son immutables. Esto significa que una
vez que una cadena de caracteres es creada no es posible modificarla. Sin embargo es posible
crear otra basandose en una operación de la cadena original. Por ejemplo:
Tipo Symbol
El Symbol es un nuevo tipo en JavaScript introducido en la versión ECMAScript Edition 6. Un
Symbol es un valor primitivo único e inmutable y puede ser usado como la clave de una propiedad
de un Object (ver debajo). En algunos lenguajes de programación, los Symbols son llamados
átomos. Se pueden comparar con enumeraciones de nombres (enum) en C. Para más detalles
consultar Symbol y el objeto envoltura Symbol en JavaScript.
Objetos
En la ciencia de la computación un objeto es un valor en memoria al cual es posible referirse
mediante un identificador.
Propiedades
En JavaScript los objetos pueden ser vistos como una colección de propiedades. Con la sintáxis
literal de objetos, un limitado grupo de propiedades son inicializadas; luego pueden ser agregadas
o eliminadas otras propiedades. Los valores de las propiedades pueden ser de cualquier tipo,
incluyendo otros objetos lo cual permite construir estructuras de datos complejas. Las
propiedades se identifican usando claves. Una clave es un valor String o Symbol.
Los operadores Aritméticos toman valores numéricos (ya sean literales o variables) como sus
operandos y retornan un valor numérico único. Los operadores aritméticos estándar son adición o
suma (+), sustracción o resta (-), multiplicación (*), y división (/).
Estos operadores trabajan al igual que en la mayoría de otros lenguajes de programacion, excepto
el operador /, que retorna una división de punto flotante en JavaScript, no una división truncada
como en lenguajes tales como C o Java.
Sintaxis
Operador: x + y
Ejemplos:
// Número + Número = Adición
1 + 2 // 3
true + 1 // 2
5 + 'foo' // "5foo"
Sintaxis
Operador: x - y
Ejemplos
5 - 3 // 2
3 - 5 // -2
'foo' - 3 // NaN
División (/)
El operador división se produce el cociente de la operación donde el operando izquierdo es el
dividendo y el operando derecho es el divisor.
Sintaxis
Operador: x / y
Ejemplos
1 / 2 // devuelve 0.5 en JavaScript
1 / 2 // devuelve 0 en Java
// (Ninguno de los números es explícitamente un número de punto flotante)
Multiplicación (*)
El operador multiplicación produce el producto de la multiplicación de los operandos.
Sintaxis
Operador: x * y
Ejemplos
2 * 2 // 4
-2 * 2 // -4
Infinito * 0 // NaN
Infinito * Infinito // Infinito
'foo' * 2 // NaN
Sintaxis
Operador: var1 % var2
Ejemplos
12 % 5 // 2
-1 % 2 // -1
1 % -2 // 1
NaN % 2 // NaN
1 % 2 // 1
2 % 3 // 2
-4 % 2 // -0
5.5 % 2 // 1.5
Exponenciación (**)
El operador de exponenciación devuelve el resultado de elevar el primer operando al segundo
operando de potencia. es decir, var1var2, en la declaración anterior, donde var1 y var2 son
variables. El operador de exponenciación es asociativo a la derecha. a ** b ** c es igual a a ** (b
** c).
Sintaxis
Operador: var1 ** var2
12. Cómo se utilizan, cómo se declaran las condiciones, case, for , foreach, while,:
sentencia for
Un bucle for se repite hasta que la condición especificada se evalúa como false. El bucle for en
JavaScript es similar al de Java y C. Una sentencia for se muestra como sigue:
Ejemplo
La siguiente función contiene una sentencia for que cuenta el número de opciones seleccionadas
en una lista (un elemento <select> que permite selección múltiple). La sentencia for declara la
variable i y la inicializa a cero. Comprueba que i es menor que el número de opciones en el
elemento <select>, ejecuta la sentencia siguiente if, e incrementa i en uno tras cada paso por el
bucle.
<form name="selectForm">
<p>
<label for="musicTypes">Choose some music types, then click the button below:</label>
<select id="musicTypes" name="musicTypes" multiple="multiple">
<option selected="selected">R&B</option>
<option>Jazz</option>
<option>Blues</option>
<option>New Age</option>
<option>Classical</option>
<option>Opera</option>
</select>
</p>
<p><input id="btn" type="button" value="How many are selected?" /></p>
</form>
<script>
function howMany(selectObject) {
var numberSelected = 0;
for (var i = 0; i < selectObject.options.length; i++) {
if (selectObject.options[i].selected) {
numberSelected++;
}
}
return numberSelected;
}
sentencia do...while
La sentencia do...while se repite hasta que la condición especificada que se evalúa sea false. Una
sentencia do...while se mostrará como sigue:
while (condicion);
sentencia se ejecuta antes de que la condición sea evaluada. Para ejecutar múltiples sentencias,
use un bloque de sentencias ({ ... }) para agruparlas. Si condicion es true, la sentencia se ejecuta de
nuevo. Al final de cada ejecución, la condición es comprobada. Cuando la condición es falsa, la
ejecución se detiene y el control pasa a la sentencia siguiente al do...while.
Ejemplo
En el siguiente ejemplo, el bucle do itera al menos una vez y vuelve a hacerlo mientras i sea menor
que 5.
do {
i += 1;
console.log(i);
} while (i < 5);
sentencia while
Una sentencia while ejecuta sus sentencias mientras la condición sea evaluada como verdadera.
Una sentencia while tiene el siguiente aspecto:
Si la condición cambia a falsa, la sentencia dentro del bucle deja de ejecutarse y el control pasa a la
sentencia inmediatamente después del bucle.
Ejemplo 1
El siguiente bucle while itera mientras n sea menor que tres:
n = 0;
x = 0;
while (n < 3) {
n++;
x += n;
}
Con cada iteración, el bucle incrementa n y añade ese valor a x. Por consiguiente, x y n toman los
siguientes valores:
sentencia label
Un label proporciona una sentencia con un identificador que permite referirse a él desde cualquier
lugar de su programa. Por ejemplo, usted puede usar un label para identificar un bucle, y usar las
sentencias break o continue para indicar si el programa debe interrumpir un bucle o continuar su
ejecución.
label :
sentencia
El valor de label puede ser cualquier identificador JavaScript que no sea una palabra reservada. La
sentencia que usted identifique con un label podrá ser cualquier sentencia.
Ejemplo
En este ejemplo, el label markLoop identifica a un bucle while.
markLoop:
while (theMark == true) {
doSomething();
}
sentencia break
Use la sentencia break para salir de un bucle, switch, o en conjunto con una sentencia label.
Cuando use break sin un label, finaliza inmediatamente el código encerrado en while, do-while,
for, o switch y transfiere el control a la siguiente sentencia.
Cuando usted use break con un label, termina la sentencia especificada por label.
La sintaxis de la sentencia break es la siguiente:
break;
break label;
La primera forma de la sintaxis finaliza con lo encerrado por el bucle o switch; la segunda finaliza lo
especificado por la sentencia label.
Ejemplo 1
El siguiente ejemplo itera a través de los elementos en un array hasta que encuentra que un índice
de un elemento cuyo valor es elValor:
if (a[i] == elValor) {
break;
sentencia continue
La sentencia continue puede usarse para reiniciar una sentencia while, do-while, for, o label.
Cuando use continue sin un label, este termina la iteración en curso del código encerrado en una
sentencia while, do-while, o for y continúa la ejecución del bucle con la siguiente iteración. A
diferencia de la sentencia break, continue no termina completamente la ejecución del bucle. En un
bucle while, salta atrás hasta la condición. En un bucle for, salta a la expresionIncremento.
Cuando use continue con un label, esta se aplica al bucle identificado con el label indicado.
La sintaxis de la sentencia continue es la siguiente:
continue;
continue label;
Ejemplo 1
El siguiente ejemplo muestra un bucle while con una sentencia continue que se ejecuta cuando el
valor de i es tres. Así, n toma los valores uno, tres, siete, y doce.
i = 0;
n = 0;
while (i < 5) {
i++;
if (i == 3) {
continue;
}
n += i;
}
sentencia for...in
La sentencia for...in itera una variable especificada sobre todas las propiedades enumerables de
un objeto. Para cada propiedad distinta, JavaScript ejecuta las sentencias especificadas. Una
sentencia for...in será como sigue:
Ejemplo
La siguiente función toma como su argumento un objeto y el nombre del objeto. Entonces itera
sobre todas las propiedades del objeto y devuelve una cadena que lista los nombres de las
propiedades y sus nombres.
coche.marca = Ford
coche.modelo = Mustang
sentencia for...of
La sentencia for...of crea un bucle iterando sobre objetos iterables (incluyendo Array, Map, Set,
argumentos, objetos etc), invocando una iteración personalizada conectando con sentencias para
ser ejecutadas por el valor de cada propiedad distinta.
Handlebars es una historia diferente a Jade, su forma de trabajo es similar a otros motores como
Jinja2 o Swig, ya que nos permite escribir etiquetas HTML y luego dentro con código del motor
propio podemos definir que imprime del contexto y la forma en que lo hace.
Otro aspecto de Handlebars es que puede funcionar en dos formas, desde el lado del servidor o
desde el lado cliente. Esta versatilidad hace que podamos decidir mejor como queremos realizar
nuestras aplicaciones, ya que si es una SPA o Aplicación de una sola página, tal vez el enfoque del
lado cliente sea más sencillo y útil, pero si queremos un web site tal vez generar todo en el
servidor sea más útil.
Handlebars tiene una sintaxis propia muy limpia que nos permite incorporar un poco de lógica de
vistas dentro de la plantilla, podemos incorporar comentarios, iterar sobre listas y bloques,
escapar o no secciones de texto. Es por ello que es importante conocer las más básicas de forma
que podamos expresar nuestras ideas de forma más cómoda y así sacar el máximo provecho,
veamos a continuación lo más básico del motor.
$(function () {
// Grab the template script
var theTemplateScript = $("#expressions-template").html();
Contexto
Express es el framework web más popular de Node, y es la librería subyacente para un gran
número de otros frameworks web de Node populares. Proporciona mecanismos para:
Escritura de manejadores de peticiones con diferentes verbos HTTP en diferentes caminos URL
(rutas).
Integración con motores de renderización de "vistas" para generar respuestas mediante la
introducción de datos en plantillas.
Establecer ajustes de aplicaciones web como qué puerto usar para conectar, y la localización de las
plantillas que se utilizan para renderizar la respuesta.
Añadir procesamiento de peticiones "middleware" adicional en cualquier punto dentro de la
tubería de manejo de la petición.
A pesar de que Express es en sí mismo bastante minimalista, los desarrolladores han creado
paquetes de middleware compatibles para abordar casi cualquier problema de desarrollo web.
Hay librerías para trabajar con cookies, sesiones, inicios de sesión de usuario, parámetros URL,
datos POST, cabeceras de seguridad y muchos más. Puedes encontrar una lista de paquetes
middleware mantenida por el equipo de Express en Express Middleware (junto con una lista de
algunos de los paquetes más populares de terceros).
¿Cómo es el código para Express?
En sitios web o aplicaciones web dinámicas, que accedan a bases de datos, el servidor espera a
recibir peticiones HTTP del navegador (o cliente). Cuando se recibe una petición, la aplicación
determina cuál es la acción adecuada correspondiente, de acuerdo a la estructura de la URL y a la
información (opcional) indicada en la petición con los métodos POST o GET. Dependiendo de la
acción a realizar, puede que se necesite leer o escribir en la base de datos, o realizar otras acciones
necesarias para atender la petición correctamente. La aplicación ha de responder al navegador,
normalmente, creando una página HTML dinámicamente para él, en la que se muestre la
información pedida, usualmente dentro de un elemento especifico para este fin, en una plantilla
HTML.
Express posee métodos para especificar que función ha de ser llamada dependiendo del verbo
HTTP usado en la petición (GET, POST, SET, etc.) y la estructura de la URL ("ruta"). También tiene
los métodos para especificar que plantilla ("view") o gestor de visualización utilizar, donde están
guardadas las plantillas de HTML que han de usarse y como generar la visualización adecuada
para cada caso. El middleware de Express, puede usarse también para añadir funcionalidades para
la gestión de cookies, sesiones y usuarios, mediante el uso de parámetros, en los métodos
POST/GET. Puede utilizarse además cualquier sistema de trabajo con bases de datos, que sea
soportado por Node (Express no especifica ningún método preferido para trabajar con bases de
datos).
El code para express es el siguiente:
app.listen(3000, function() {
console.log('Aplicación ejemplo, escuchando el puerto 3000!');
});
Las primeras dos líneas incluyen (mediante la orden require()) el módulo de Express y crean una
aplicación de Express. Este elemento se denomina comúnmente app, y posee métodos para el
enrutamiento de las peticiones HTTP, configuración del 'middleware', y visualización de las vistas
de HTML, uso del motores de 'templates', y gestión de las configuraciones de las aplicaciones que
controlan la aplicación (por ejemplo el entorno, las definiciones para enrutado ... etcetera.)
Las líneas que siguen en el código (las tres líneas que comienzan con app.get) muestran una
definición de ruta que se llamará cuando se reciba una petición HTTP GET con una dirección ('/')
relativa al directorio raíz. La función 'callback' coge una petición y una respuesta como
argumentos, y ejecuta un send() en la respuesta, para enviar la cadena de caracteres: "Hola
Mundo!".
El bloque final de código, define y crea el servidor, escuchando el puerto 3000 e imprime un
comentario en la consola. Cuando se está ejecutando el servidor, es posible ir hasta la dirección
localhost:3000 en un navegador, y ver como el servidor de este ejemplo devuelve el mensaje de
respuesta.
Arreglos simples
Los arrays simples, también llamados "tablas" o "matrices", son el método más común y simple de
almacenar datos. Técnicamente, un Array es un objeto intrínseco de JavaScript. Admite datos del
tipo cadenas, números, objetos, arrays, true, false, null.
Propiedad:
length: devuelve al número de elementos del array;
Uso: tabla.length
Métodos:
concat
Definición: este método añade al final de un array los elemementos de otro array.
Uso: var a = [] , b = [] , c = []; c = a.concat(b);
join
Definición: este método crea un texto con los elementos del array separados por un carácter que
se especifique.
Uso: var a = []; var texto = a.join("#");
Ejemplo:
var a = [1,2,3];
var texto = a.join("-");
// devuelve texto = "1-2-3"
reverse
Definición: este método genera un nuevo array transponiendo los elementos del array al que le
aplicamos dicho método. Uso: var a = [];
var b = a.reverse();
slice
Definición: devuelve al fragmento del array comprendido entre los elementos cuyas
posicionespasemos como parámetros (inicial, final); si se utiliza un solo parámetro es desde esa
posicion hasta el final. Uso: var a =[]; a.slice(inicial[opcional:,final]);
Ejemplo:
var $tabla = ["lunes","martes","miercoles","jueves"];
var $aux = $tabla.slice(0,2);
print($aux.join("="));
//devuelve "lunes=martes"
var $aux2 = $tabla.slice(2);
print($aux2.join("="));
//devuelve "miercoles=jueves"
sort
Definición: ordena los elementos de un array.
Uso: var a = []; a.sort();
Ejemplo:
var $tabla = ["lunes","martes","miercoles","jueves"];
print($tabla.sort());
// devuelve "jueves,lunes,martes,miercoles"
Accediendo a elementos
Accediendo a elementos individuales del array:
nombre_array[índice] (índice = 0,1,...,n-1) (n = nombre_array.length)
Accediendo a todos los elementos del array:
Método 1: bucle for
Ejemplo: for(i = 1; i< $tabla.length; i++){ ... }
Un objeto es una colección de propiedades, y una propiedad es una asociación entre un nombre (o
clave) y un valor. Un valor de una propiedad puede ser una función, en cuyo caso la propiedad es
conocida como un método. Además de los objetos que están predefinidos en el navegador,
puedes definir tus propios objetos.
Un objeto de JavaScript tiene propiedades asociadas a él. Una propiedad de un objeto puede ser
explicada como una variable adjunta al objeto. Las propiedades de un objeto son basicamente lo
mismo que las variables comunes de JavaScript, excepto por el nexo con el objeto. Las
propiedades de un objeto definen las características de un objeto; se puede acceder a ellas con
una simple notación de puntos:
nombreObjeto.nombrePropiedad
Como todas las variables de JavaScript, tanto el nombre del objeto (que puede ser una variable
normal) y el nombre de propiedad son sensible a mayúsculas y minúsculas. Puedes definir
propiedades asignándoles un valor. Por ejemplo, vamos a crear un objeto llamado miAuto y le
vamos a asignar propiedades denominadas marca, modelo, y año de la siguiente manera:
miAuto.color; // undefined
Las propiedades de los objetos en JavaScript también pueden ser accedidas o establecidas
mediante la notación de corchetes [ ](Para más detalle ver property accesors). Los objetos son
llamados a veces arreglos asociativos, ya que cada propiedad está asociada con un valor de cadena
que puede ser utilizada para acceder a ella. Así, por ejemplo, puedes acceder a las propiedades del
objeto miAuto de la siguiente manera:
miAuto["marca"] = "Ford";
miAuto["modelo"] = "Mustang";
miAuto["año"] = 1969;
El nombre de la propiedad de un objeto puede ser cualquier cadena válida de JavaScript, o
cualquier cosa que se pueda convertir en una cadena, incluyendo una cadena vacía. Sin embargo,
cualquier nombre de propiedad que no sea un identificador válido de JavaScript (por ejemplo, el
nombre de alguna propiedad que tenga un espacio o un guión, o comienza con un número) sólo
puede ser accedido utilizando la notación de corchetes. Esta notación es muy útil también cuando
los nombres de propiedades son determinados dinámicamente (cuando el nombre de la
propiedad no se determina hasta su tiempo de ejecución). Ejemplos de ésto se muestran a
continuación:
console.log(miObjeto);
bucles for...in
Este método recorre todas las propiedades enumerables de un objeto y su cadena de prototipo.
Object.keys(o)
Este método devuelve una matriz con todos los nombres de propiedades ("keys") enumerables y
propias (no de la cadena de prototipos) de un objeto o.
Object.getOwnPropertyNames(o)
Este método devuelve una matriz que contiene todos los nombres (enumerables o no) de las
propiedades de un objeto o.
Antes de ECMAScript 5, no existía una manera nativa para listar todas las propiedades de un
objeto. Sin embargo, esto se puede lograr con la siguiente función:
function listaTodasLasPropiedades(o){
var objetoAInspeccionar;
var resultado = [];
return resultado;
JavaScript tiene un número de objetos predefinidos. Además, puedes crear tus propios objetos. En
JavaScript 1.2 y versiones posteriores, puedes crear un objeto usando un inicializador de objeto.
Como alternativa, puedes crear primero una función constructora y luego crear una instancia de
un objeto invocando esa función con el operador new.
Además de la creación de objetos utilizando una función constructora, puedes crear objetos
utilizando un inicializador de objeto. El uso de los inicializadores de objeto se refiere a veces a
como crear objetos con la notación literal. "Inicializador de objeto" es consistente con la
terminología utilizada por C++.
El objeto JSON contiene métodos para analizar JavaScript Object Notation (JSON) y convertir
valores a JSON. No puede ser llamado o construído, y aparte de estas dos propiedades, no tiene
funcionalidad interesante por sí mismo.
JSON es una sintaxis para serializar objetos, arreglos, números, cadenas, booleanos y nulos. Está
basado sobre sintaxis JavaScript pero es diferente a ella: algo JavaScript no es JSON, y algo JSON
no es JavaScript.
Tipo
JavaScrip Diferencia JSON
t
Los nombres de las propiedades deben tener doble comilla; las comas
Objetos y finales están prohibidas.
arreglos
JSON = null
or true or false
or JSONNumber
or JSONString
or JSONObject
or JSONArray
JSONNumber = - PositiveNumber
or PositiveNumber
PositiveNumber = DecimalNumber
or DecimalNumber . Digits
or DecimalNumber . Digits ExponentPart
or DecimalNumber ExponentPart
DecimalNumber = 0
or OneToNine Digits
ExponentPart = e Exponent
or E Exponent
Exponent = Digits
or + Digits
or - Digits
Digits = Digit
or Digits Digit
Digit = 0 through 9
OneToNine = 1 through 9
JSONString = ""
or " StringCharacters "
StringCharacters = StringCharacter
or StringCharacters StringCharacter
StringCharacter = any character
except " or \ or U+0000 through U+001F
or EscapeSequence
EscapeSequence = \" or \/ or \\ or \b or \f or \n or \r or \t
or \u HexDigit HexDigit HexDigit HexDigit
HexDigit = 0 through 9
or A through F
or a through f
JSONObject = { }
or { Members }
Members = JSONString : JSON
or Members , JSONString : JSON
JSONArray = [ ]
or [ ArrayElements ]
ArrayElements = JSON
or ArrayElements , JSON
20. Qué son las rutas en nodeJS y como se utilizan en el express:
// respond with "hello world" when a GET request is made to the homepage
app.get('/', function(req, res) {
res.send('hello world');
});
Métodos de ruta
Un método de ruta se deriva de uno de los métodos HTTP y se adjunta a una instancia de la clase
express.
El siguiente código es un ejemplo de las rutas que se definen para los métodos GET y POST a la raíz
de la aplicación.
Express da soporte a los siguientes métodos de direccionamiento que se corresponden con los
métodos HTTP: get, post, put, head, delete, options, trace, copy, lock, mkcol, move, purge,
propfind, proppatch, unlock, report, mkactivity, checkout, merge, m-search, notify, subscribe,
unsubscribe, patch, search y connect.
21. Qué son los script de arranque. Donde se configura el ambiende de producción y el de
desarrollo. Cómo colocarles un alias a los script de arranque.
Un script es un programa insertado dentro del documento html y que es interpretado y ejecutado
por el navegador del usuario. Por tanto estos programas se ejecutan en el ordenador del usuario
bien sea directamente (al leer la página) o cuando se produce un suceso determinado (eventos),
como puede ser el pulsar sobre un enlace o mover el ratón o cargar una imagen o modificar el
tamaño de la ventana del navegador.
Estos scripts permiten crear páginas dinámicas: modificar el comportamiento normal del
navegador, validar formularios, realizar pequeños efectos visuales, etc... Sin embargo, conviene
recordar que se ejecutan en el navegador del usuario y no en el servidor donde las páginas estén
alojadas, por lo que no podrán realizar cosas como manejar bases de datos. Esto hace que
aplicaciones como contadores o buscadroes (por ejemplo) se deban realizar de otra manera,
utilizando los llamdos programas CGI (escritos en lenguajes como Perl o PHP).
Ejecute el script de arranque para configurar la red en el dispositivo del proveedor de servicios.
Procedimiento
1-En vSphere Client, encienda el dispositivo del SP1 y abra la ventana de la consola.
2-Inicie sesión con el usuario desktone y la contraseña que introdujo en la sección anterior.
3-Empiece el proceso de arranque ejecutando el siguiente comando:
sudo /usr/local/desktone/scripts/bootstrap.sh
4-El script de arranque le solicita que introduzca la información de red en los campos que
aparecen en la siguiente tabla. Los valores que se muestran son solo valores de ejemplo. Cuando
termine de escribir la información de red, el host se reinicia. El dispositivo podría tardar cinco
minutos en iniciarse después del reinicio. Como el nodo no se configura hasta que se completa el
reinicio, ignore los mensajes de error que aparezcan en la consola.
5-Después de que se reinicie el host, puede iniciar sesión mediante putty u otro terminal SSH de su
elección.
6-Introduzca la información en los campos como se describe a continuación.
¿Qué es el package.json?
De cierta forma, podemos considerar este package.json como un manifiesto de nuestro proyecto.
Históricamente, Node ha trabajado con una herramienta para administrar paquetes llamada npm.
Esta herramienta, que normalmente se instala junto con Node, tiene dos roles fundamentales:
Manejar la publicación de un proyecto al registro público de npm (para que otros puedan
descargarlo y utilizarlo como dependencia en sus propios proyectos).
Nombre de tu proyecto.
Versión.
Dependencias.
Repositorio.
Autores.
Licencia.
Y más.
¿Cómo crearlo?
Antes de crear un package.json, hay solo una regla a tener en consideración: El archivo debe ser
un JSON de formato válido
Para crearlo, hay 2 formas: hacerlo de forma manual o hacerlo de forma automática:
name.
version.
Todos los demás campos son opcionales, aunque recomendados.
Dependiendo de cual usemos, el asistente nos hará algunas preguntas para definir la información
del proyecto (nombre, version, archivo de entrada, licencia y repositorio entre otros)
Al terminar, tendremos un nuevo y flamante package.json en la raíz del directorio donde hayamos
ejecutado el comando.
El sistema de control de versiones de paquetes de npm tiene reglas estrictas. El formato de las
versiones es el siguiente:
[major].[minor].[patch]
Supongamos que tiene un paquete en la aplicación con la versión 5.2.1. La versión principal es 5, la
versión secundaria es 2 y el parche es 1.
En una actualización de versión principal, el paquete incluye nuevas características que no son
compatibles con versiones anteriores, es decir, cambios importantes.
En una actualización de versión secundaria, se han agregado nuevas características al paquete que
son compatibles con versiones anteriores del paquete.
En una actualización de revisión, se incluyen una o varias correcciones de errores. Las correcciones
de errores son siempre compatibles con versiones anteriores.
Conviene tener en cuenta que algunas características del paquete de npm tienen dependencias.
Por ejemplo, para usar una nueva característica del paquete de compilador de TypeScript (ts-
loader) con webpack, es posible que también tenga que actualizar los paquetes webpack npm y
webpack-cli.
Para ayudar a administrar el control de versiones del paquete, npm es compatible con varias
notaciones que puede usar en el archivo package.json. Puede usar estas notaciones para controlar
el tipo de actualizaciones del paquete que quiere aceptar en la aplicación.
Supongamos que está usando React y debe incluir los paquetes npm react y react-dom. Podría
especificarlo de varias maneras en su archivo package.json. Por ejemplo, puede especificar el uso
de la versión exacta de un paquete de la siguiente forma.
"dependencies": {
"react": "16.4.2",
"react-dom": "16.4.2",
},
Al usar la notación anterior, npm siempre obtendrá la versión exacta especificada, 16.4.2.
Puede usar una notación especial para limitar las actualizaciones a solo actualizaciones de
revisiones (correcciones de errores). En este ejemplo:
"dependencies": {
"react": "~16.4.2",
"react-dom": "~16.4.2",
},
23. Qué es un componente / dependencias, cómo se instala y cuales son los más utilizados para
configura express. (MYSQL, handlebars, encriptar, login, )
Los componentes permiten separar la interfaz de usuario en piezas independientes, reutilizables y
pensar en cada pieza de forma aislada.Esta página proporciona una introducción a la idea de los
componentes.
Conceptualmente, los componentes son como las funciones de JavaScript. Aceptan entradas
arbitrarias (llamadas “props”) y devuelven a React elementos que describen lo que debe aparecer
en la pantalla.
Esta función es un componente de React válido porque acepta un solo argumento de objeto
“props” (que proviene de propiedades) con datos y devuelve un elemento de React. Llamamos a
dichos componentes “funcionales” porque literalmente son funciones JavaScript.
También puedes utilizar una clase de ES6 para definir un componente:
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
Los dos componentes anteriores son equivalentes desde el punto de vista de React.
Tanto los componentes de función como de clase tienen algunas características adicionales que
veremos en las próximas secciones.
Renderizando un componente
Anteriormente, sólo encontramos elementos de React que representan las etiquetas del DOM:
Sin embargo, los elementos también pueden representar componentes definidos por el usuario:
const element = <Welcome name="Sara" />;
Composición de componentes
Los componentes pueden referirse a otros componentes en su salida. Esto nos permite utilizar la
misma abstracción de componente para cualquier nivel de detalle. Un botón, un cuadro de
diálogo, un formulario, una pantalla: en aplicaciones de React, todos son expresados comúnmente
como componentes.
Por ejemplo, podemos crear un componente App que renderiza Welcome muchas veces:
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
function App() {
return (
<div>
<Welcome name="Sara" /> <Welcome name="Cahal" /> <Welcome
name="Edite" /> </div>
);
}
ReactDOM.render(
<App />,
document.getElementById('root')
);
Nodemon es una de las muchas herramientas que nos proporciona npm para mejorar o añadir
algunas funcionalidades extra y normalmente muy útil útiles a Node.js
¿PARA QUÉ SIRVE NODEMON?
Nodemon se ha creado para facilitar el desarrollo en Node.js añadiendo una nueva función que
nos va a venir muy bien, que es la de permitir que todos los cambios que realicemos en nuestro
proyecto se implementen a tiempo real en este.
Cuando queremos ejecutar un fichero con Node, normalmente utilizaríamos el siguiente comando
en la terminal:
node app.js
Donde app.js sería el fichero que queramos ejecutar con Node.
El problema de esto es que si realizáramos cambios durante el desarrollo, estos no se verían
actualizados en tiempo real. Eso es lo que cambia Nodemon, que podríamos decir que es una
especie de extensión del comando Node.
nodemon -v
Su uso es muy sencillo, simplemente tendrás que utilizar el comando nodemon en lugar de node al
ejecutar un archivo .js:
nodemon app.js
Al hacerlo verás como la terminal crea un proceso, esto mantendrá a tu terminal ocupada, así que
por si lo que sea necesitas hacer otras cosas con la terminal mientras tanto, tendrás que abrir otra.
Para salir del proceso simplemente pulsa CTRL + C y volverás a poder poner comandos en la
terminal.
Ahora solo te queda probar lo que ocurre al actualizar tu proyecto, verás que como te he dicho
todo se actualiza en tiempo real.
morgan ( ' : método: url: estado: res [longitud del contenido] -: tiempo de respuesta ms ' )
volver [
fichas . res ( req , res , ' longitud de contenido ' ) , ' - ' ,
})
Opciones
inmediato
Escriba la línea de registro a petición en lugar de respuesta. Esto significa que las solicitudes se
registrarán incluso si el servidor falla, pero los datos de la respuesta (como el código de respuesta,
la longitud del contenido, etc.) no se pueden registrar .
omitir
Función para determinar si se omite el registro, el valor predeterminado es false. Esta función se
llamará como skip(req, res).
skip : function ( req , res ) { return res . statusCode < 400 }
})
corriente
Formatos predefinidos
conjunto
común
dev
corto
minúsculo
La salida mínima.
Morgan . token ( ' type ' , function ( req , res ) { return req . headers [ ' content-type ' ] } )
Se espera que la función de token se invoque con los argumentos reqy res, que representan la
solicitud HTTP y la respuesta HTTP. Además, el token puede aceptar más argumentos al elegir
personalizar el comportamiento.
:formato de fecha]
webpara el formato de fecha y hora común RFC 1123 ( Tue, 10 Oct 2000 13:55:36 GMT)
: versión http
:método
: referente
: dirección-remota
: usuario remoto
: req [encabezado]
:estado
Si el ciclo de solicitud / respuesta se completa antes de que se envíe una respuesta al cliente (por
ejemplo, el socket TCP se cerró prematuramente por un cliente que abortó la solicitud), entonces
el estado estará vacío (mostrado como "-"en el registro).
: url
:agente de usuario
morgan.compile (formato)
Ejemplos
expresar / conectar
Aplicación simple que registrará todas las solicitudes en el formato combinado de Apache en
STDOUT
} )
// crear "middleware"
http . createServer ( función ( req , res ) {
} )
} )
fila india
Aplicación simple que registrará todas las solicitudes en el formato combinado de Apache en el
archivo access.log.
// crea una secuencia de escritura (en modo adjuntar)
// configurar el registrador
} )
Aplicación simple que registrará todas las solicitudes en el formato combinado de Apache en un
archivo de registro por día en el log/directorio utilizando el módulo de flujo de archivos
rotativos .
} )
// configurar el registrador
} )
} ) )
} ) )
} )
} )
} )
siguiente ( )
26. Cómo la ruta recibe los parámetros, cuál es a función que se utiliza para poder recibir
parámetros.
PARÁMETROS O ARGUMENTOS
Los parámetros o argumentos son una forma de intercambiar información con el método. Pueden
servir para introducir datos para ejecutar el método (entrada) o para obtener o modificar datos
tras su ejecución (salida).
DECLARACIÓN DE PARÁMETROS
// Sin parametros
return ...;
...
...
...
...
}
El identificador del parámetro se emplea sólo dentro del método para hacer referencia al
argumento correspondiente y puede coincidir con el de un atributo de la misma clase. En tal caso,
se dice que oculta a la variable miembro. Esta técnica suele emplearse en los constructores para
inicializar una instancia. Por ejemplo en la clase Circulo:
int x, y, radio;
...
La clase Circulo tiene tres atributos o variables miembro x, y y radio y un constructor con tres
argumentos con los mismos identificadores que facilitan los valores iniciales a los atributos
respectivamente. Los identificadores de los parámetros ocultan a las variables miembro dentro del
cuerpo del constructor, de forma que x, y y radio dentro del constructor hacen referencia a los
parámetros y no a las variables miembro. Para acceder a las variables miembro, es necesario
emplear la palabra reservada this que referencia a la instancia que está siendo inicializada por el
constructor.
public class Circulo {
int x, y, radio;
public Circulo(int x, int y, int radio) {
this.x = x; // this.x hace referencia al
atributo x
// x hace referencia al parametro x
this.y = y; // this.y hace referencia al
atributo y
// y hace referencia al parametro y
this.radio = radio;
}
Normalmente dentro del cuerpo del método de una clase puede hacerse referencia directa a las
variables miembro de las instancias. Salvo en el caso del ejemplo anterior en el que las variables
miembro están ocultas. Por otro lado, los parámetros de un mismo método no puede compartir el
mismo identificador (no pueden coincidir) con el de una variable local. El siguiente código genera
un error de compilación:
public void asigna(double x) {
...
/**
* Declaracion de la clase CuentaBancaria
* Ejemplo de declaracion de variables
* metodos estaticos y uso de this
*/
public class CuentaBancaria {
// Atributos o variables miembro
private double saldo;
public static int totalCuentas=0;
// Metodos
public CuentaBancaria() {
this(0.0);
}
public CuentaBancaria( double ingreso ) {
saldo = ingreso;
incCuentas();
}
public double saldo() {
return saldo;
}
public static void incCuentas () {
totalCuentas++;
}
// Transfiere todo el dinero de la cuenta origen a la actual
public void transferencia( CuentaBancaria origen ) {
saldo += origen.saldo;
origen.saldo=0;
}
}
Ejemplo de programa que emplea la clase CuentaBancaria con una llamada al método
transferencia:
/**
* Ejemplo de uso de la clase CuentaBancaria
*/
public class PruebaCuentaBancaria {
public static void main (String [] args) {
System.out.println("Total cuentas: " +
CuentaBancaria.totalCuentas);
CuentaBancaria c1;
c1 = new CuentaBancaria(17.5);
System.out.println("Nueva cuenta con: " + c1.saldo() + "
euros");
System.out.println("Total cuentas: " +
CuentaBancaria.totalCuentas);
CuentaBancaria c2;
c2 = new CuentaBancaria(20.0);
System.out.println("Nueva cuenta con: " + c2.saldo() + "
euros");
System.out.println("Total cuentas: " +
CuentaBancaria.totalCuentas);
System.out.println("Transferencia de cuenta 2 a cuenta
1");
c1.transferencia(c2);
System.out.println("Cuenta 1 con: " + c1.saldo() + "
euros");
System.out.println("Cuenta 2 con: " + c2.saldo() + "
euros");
} }
La ejecución del código anterior origina la siguiente salida por pantalla:
$>java PruebaCuentaBancaria
Total cuentas: 0
Nueva cuenta con: 17.5 euros
Total cuentas: 1
Nueva cuenta con: 20.0 euros
Total cuentas: 2
Transferencia de cuenta 2 a cuenta 1
Cuenta 1 con: 37.5 euros
Cuenta 2 con: 0.0 euros
27. Cuál es la función para poder enviar por el método post los valores que se envían desde un
formulario Handlebars
Lo primero que debes saber para enviar datos de formularios es recuperar la información escrita
en los campos de uno de los formularios de la página. Para ello en Javascript disponemos de los
objetos FormData.
FormData nos permite disponer de un objeto con todos los datos del formulario, con pares clave
valor. Donde la clave es el "name" del campo de formulario y el valor es su propiedad "value".
Recibir todos los datos de un formulario es tan sencillo como ejecutar el constructor FormData,
enviando como parámetro el objeto formulario que queremos usar para recuperar sus datos. Sería
algo como esto:
const data = new
FormData(document.getElementById('formulario'));
Ahora ya podemos usar este objeto para enviar los datos por POST. Esta parte es muy sencilla, ya
que simplemente tenemos que configurar el method como "POST" y pasar los datos en el body de
la solicitud. Lo harías con un código como este:
fetch('../post.php', {
method: 'POST',
body: data
})
El código completo de nuestra llamada Ajax podría ser algo como esto:
const data = new
FormData(document.getElementById('formulario'));
fetch('../post.php', {
method: 'POST',
body: data
})
.then(function(response) {
if(response.ok) {
return response.text()
} else {
throw "Error en la llamada Ajax";
}
})
.then(function(texto) {
console.log(texto);
})
.catch(function(err) {
console.log(err);
});
Componer los datos del envío POST sin necesidad de un formulario
Podría ocurrirte que necesites enviar datos por POST pero que no dispongas de un formulario en la
página donde el usuario haya escrito esos datos. Es decir, generar desde cero los datos del
formulario, con variables o datos que tengas en Javascript.
Esto es perfectamente posible, aunque es algo más relativo al uso del objeto FormData que a la
propia llamada Ajax con Fetch. Lo conseguimos mediante dos pasos.
Creamos un objeto FormData vacío, simplemente enviando al constructor FormData los paréntesis
vacíos.
Creamos todos los datos arbitrarios con el método append() que recibe el dato que se quiere
agregar al FormData, con su par clave/valor.
El código te quedará como puedes ver a continuación
const data = new FormData();
data.append('empresa', 'DesarrolloWeb.com');
data.append('CIF', 'ESB00001111');
data.append('formacion_profesional', 'EscuelaIT');
fetch('../post.php', {
method: 'POST',
body: data
})
.then(function(response) {
if(response.ok) {
return response.text()
} else {
throw "Error en la llamada Ajax";
}
})
.then(function(texto) {
console.log(texto);
})
.catch(function(err) {
console.log(err);
});
Sintaxis:
Parámetros:
29. Definir el proyecto (aplicación web) de aula: breve descripción, módulos, cuales son las
vistas que lleva.
Redirige a la URL derivada del especificado path, con especificado status, un entero positivo que
corresponde a un código de estado HTTP . Si no se especifica, el valor statuspredeterminado es
"302" Encontrado ".
res.redirect('/foo/bar')
res.redirect('http://example.com')
res.redirect(301, 'http://example.com')
res.redirect('../login')
Los redireccionamientos pueden ser una URL totalmente calificada para redireccionar a un sitio
diferente:
res.redirect('http://google.com')
los redireccionamientos pueden ser relativos a la raíz del nombre de host. Por ejemplo, si la
aplicación está encendida http://example.com/admin/post/new, lo siguiente redirigirá a la URL
http://example.com/admin:
res.redirect('/admin')
Los redireccionamientos pueden ser relativos a la URL actual. Por ejemplo, desde
http://example.com/blog/admin/(observe la barra inclinada), lo siguiente redirigirá a la URL
http://example.com/blog/admin/post/new.
res.redirect('post/new')
res.redirect('..')
res.redirect('back')
Ahora definiremos en un archivo html que podría ser index.html la carga de RequireJS como se
muestra a continuación.
1 <!DOCTYPE html>
2 <html>
3 <head>
4 </head>
5 <body>
6 <script data-main="libs/main" src="libs/require.js"></script>
7 </body>
8 </html>
Como se ve la inclusión se realiza con la etiqueta script de HTML dentro del body, pero también
podría hacerse dentro del <head></head>.
Configurar RequireJS.
En nuestro archivo libs/main.js definiremos las opciones, lo primero que debemos hacer definir los
archivos con los cuales vamos a trabajar como se muestra a continuación.
1 require.config({
2 baseUrl: 'libs',
3 paths : {
4 backbone : 'backbone',
5 underscore : 'underscore',
6 jquery : 'jquery',
7 marionette : 'backbone.marionette',
8 wreqr : 'backbone.wreqr',
9 eventbinder : 'backbone.eventbinder',
10 babysitter : 'backbone.babysitter'
11 }
12 });
Todos los archivo se buscaran dentro de directorio definido usando la propiedad baseUrl, y con la
propiedad paths se definirán la ubicación de las librerías y se definirá una llave para referirse a la
librería posteriormente, la extensión .js no es necesaria y será agregada por RequireJS
posteriormente.
Como su nombre lo indica el patron AMD realiza una carga asíncrona de los paquetes. Debido a
que no todas la librerias implementan este patron AMD es probable que una librería A intente a
usar una función de una librería B que aun no este cargada ocasionando un error.
32. Cuales son las sentencia SQL para (consultar, modificar, eliminar, agregar ) un registro a la
base de datos.
Modificar registros
imagen sql
Borrar registros.
Hasta ahora hemos visto cómo crear y consultar registros o filas de las tablas. Veremos ahora
cómo borrarlos o modificarlos. Empezamos por el borrado.
Para eliminar un registro de una tabla utilizaremos la sentencia DELETE:
Con "DELETE FROM nombre_tabla" localizamos la tabla en la que queremos borrar un registro, y
con la instrucción "WHERE columna1='valor' " localizamos el o los registros que queremos borrar.
Observa la importancia de la instrucción WHERE, en ella indicamos los registros que queremos
borrar: todos los registros que cumplan con la condición indicada (es decir en cuya columna
indicada esté el valor indicado) serán eliminados.
De no poner la instrucción WHERE se eliminarán todos los registros de la tabla. La tabla seguirá
existiendo, pero será una tabla vacía, sin ningún registro (sólo se mantiene la estructura).
Hay que tener mucho cuidado con la instrucción DELETE, ya que la eliminación de un registro se
hace de forma irreversible. Una vez eliminado ya no se pueden recuperar los datos.
Por ejemplo, tenemos una tabla "agenda" con las columnas "nombre", "telefono" y "email".
Queremos eliminar un registro que tiene en "nombre" el valor 'Juan Ruiz', lo haremos con la
siguiente sentencia:
Actualizar un registro
Supongamos ahora que en la tabla "agenda" anterior, tenemos un nombre, por ejemplo 'Alberto
Sanchez' que ha cambiado su teléfono y su email. Para cambiar su teléfono y su email en la agenda
podríamos borrar su registro y crear uno nuevo con el nuevo teléfono y email. Sin embargo esto
no resulta práctico, ya que podemos modificar el registro mediante la sentencia UPDATE:
UPDATE agenda
SET telefono='662142223' , email='[email protected]'
WHERE nombre='Alberto Sanchez'
Para cambiar los datos de un registro (actualizarlo) procedemos de la siguiente manera:
Escribimos después la palabra clave SET, seguida por los datos que queremos cambiar para ello
indicamos la columna en la que los pondremos, seguida del signo igual, y el valor del dato. si hay
más de un dato a cambiar, los separaremos por comas.
Podemos después la instruccion WHERE, que indica cual es la fila o registro en donde se debe
cambiar el dato. La fila o filas que coincidan con la condición indicada son las que cambiarán sus
datos.
Puede omitir la lista de campos, pero solo si proporciona todos los valores que puede contener el
registro.
INSERT INTO tblCustomers
VALUES (1, Kelly, 'Jill', '555-1040', '[email protected]')
3194780042