This commit is contained in:
Alberto Basalo 2015-11-10 19:52:33 +01:00
Родитель 432bac325b
Коммит 6734fa27f4
16 изменённых файлов: 223 добавлений и 210 удалений

Просмотреть файл

@ -1,4 +1,10 @@
/** incluímos módulo para usar $resource */
/** original */
angular.module('cashFlow', ['ngResource', 'ngCookies', 'ui.router', 'registro', 'lista', 'total', 'nuevo', 'abComponentes', 'abMenuNavegacion']);
/** estructura modular jerárquica */
angular.module('cashFlow', ['terceros', 'componentes', 'estados']);
angular.module('terceros', ['ngResource', 'ngCookies', 'ui.router']);
angular.module('componentes', 'abComponentes', 'abMenuNavegacion']);
angular.module('estados', ['registro', 'lista', 'total', 'nuevo']);
/** módulos para cada componente */

Просмотреть файл

@ -1,10 +1,12 @@
// Se ejecutan las instucciones del fichero secuencialmente... o no.
// Se ejecutan las instrucciones del fichero secuencialmente... o no.
// delaraciones
// variables
var nombre = 'Alberto';
var edad = 43;
var edad = 25;
// funciones
function imprimir(texto){
console.log(texto);
function imprimir(texto) {
console.log(texto);
}
// expresiones
imprimir(nombre + " tiene " + edad + " años");

Просмотреть файл

@ -1,10 +1,10 @@
"use strict"; // restricciñon para mejorar la calidad del código
"use strict"; // restricción para mejorar la calidad del código
var nombre = 'Alberto';
//edad = 43;
var edad = 43;
//edad = 24;
var edad = 25;
function imprimir() {
console.log(nombre + " tiene " + edad + " años");
console.log(nombre + " tiene " + edad + " años");
}
imprimir();

Просмотреть файл

@ -6,7 +6,7 @@
var stdin = process.openStdin();
var nombre = 'Anónimo';
var edad = 43;
var edad = 23;
console.log("¿Cómo te llamas ?");
@ -17,10 +17,10 @@ stdin.addListener("data", alRecibirDatos);
// función callback que se ejecutara en respuesta al evento
function alRecibirDatos(data) {
nombre = data.toString().substring(0, data.length - 1);
imprimir();
nombre = data.toString().substring(0, data.length - 1);
imprimir();
}
function imprimir() {
console.log(nombre + " tiene " + edad + " años");
console.log(nombre + " tiene " + edad + " años");
}

Просмотреть файл

@ -1,13 +1,13 @@
//Versión más elaborada con callbacks
"use strict";
// ahora vmos a escribir también en otro buffer
// ahora vamos a escribir también en otro buffer
var stdin = process.stdin,
stdout = process.stdout; // buffer de salida hacia la conola
stdout = process.stdout; // buffer de salida hacia la conola
var persona = {
nombre: 'Anónimo',
edad: 0
nombre: 'Anónimo',
edad: 0
};
process.stdin.setEncoding('utf8');
@ -15,28 +15,29 @@
preguntar("¿Cómo te llamas ?", guardarNombre);
function guardarNombre(nombre) {
persona.nombre = nombre;
// Volver a preguntar
preguntar("Hola " + persona.nombre + " ¿Cuántos años tienes?", guardarEdad);
persona.nombre = nombre;
// Volver a preguntar
preguntar("Hola " + persona.nombre + " ¿Cuántos años tienes?", guardarEdad);
}
function guardarEdad(edad) {
persona.edad = edad;
if (persona.edad >= 18) {
process.stdout.write("Adelante " + persona.nombre + " de " + persona.edad + " años \n");
} else {
process.stdout.write("Lo siento " + persona.nombre + " de " + persona.edad + " años \n");
}
process.exit();
persona.edad = edad;
if (persona.edad >= 18) {
process.stdout.write("Adelante " + persona.nombre + " de " + persona.edad + " años \n");
} else {
process.stdout.write("Lo siento " + persona.nombre + " de " + persona.edad + " años \n");
}
// terminar el proceso explícitamente
process.exit();
}
function preguntar(pregunta, procesoPosterior) {
stdin.resume();
stdout.write(pregunta + ": ");
// cuando tengamo datos
stdin.once('data', function (respuesta) {
// ejecutar el callback que nos han pasado
// con los datos obtenidos
procesoPosterior(respuesta.toString().trim());
});
stdin.resume();
stdout.write(pregunta + ": ");
// cuando tengamos datos
stdin.once('data', function (respuesta) {
// ejecutar el callback que nos han pasado
// enviándoles los datos obtenidos
procesoPosterior(respuesta.toString().trim());
});
}

Просмотреть файл

@ -1,7 +1,7 @@
"use strict";
// Ciertas funionaes de node están empaquetadas en módulos
// Mediante la instrucción requiere, se reclaman los módulos por nombre o ruta,
// Las funiones de escucha y respuesta http están en el módulo... http
// Ciertas funiones de Node están empaquetadas en módulos
// Mediante la instrucción require, se reclaman los módulos por nombre o ruta,
// Las funciones de escucha y respuesta http están en el módulo... http
var http = require('http');
// escuchar en un puerto
@ -10,9 +10,9 @@ http.createServer(server).listen(3000);
// Esta es la función que recoge las peticiones
// Es un callback que se lanza en cada evento de petición recibida
function server(req, res) {
// y envía las respuestas
res.writeHead({
'Content-Type': 'text/plain'
});
res.end('Hola, esto lo envía NodeJS desde un navegador ;-)');
// y envía las respuestas
res.writeHead({
'Content-Type': 'text/plain'
});
res.end('Hola, esto lo envía NodeJS desde un servidor ;-)');
}

Просмотреть файл

@ -1,89 +0,0 @@
// un uso muy común de nodeJS
// es disponer de un servidor
// que publique el contenido estático de un directorio
"use strict";
// Ahora requeimos más módulos propios de NodeJS
var http = require('http'),
url = require('url'),
path = require('path'),
fs = require('fs');
var mimeTypes = {
"html": "text/html",
"png": "image/png",
"js": "text/javascript",
"css": "text/css"
};
http.createServer(staticServer).listen(3000);
function staticServer(req, res) {
// acceder a la url
var pathname = url.parse(req.url).pathname;
console.log('me piden... ' + pathname);
if (uri === "/") {
homePage(res);
} else {
fileServer(res, pathname);
}
}
function homePage(res) {
res.writeHead(200, {
"Content-Type": "text/html"
});
res.write("<html>");
res.write("<head>");
res.write("<meta charset='utf-8'>");
res.write("<title>Hola Mundo</title>");
res.write("</head>");
res.write("<body>");
res.write("<h1>Texto Hard-coded</h1><p>enviado por NodeJS al navegador<p> ;-)");
res.write("</body>");
res.write("</html>");
res.end();
}
function fileServer(res, pathname) {
// obtener la ruta en disco a partir de la ruta web
var filename = path.join(process.cwd(), 'client', pathname);
var extension = path.extname(filename).split(".")[1];
if (!extension) {
extension = "html";
filename += "." + extension;
}
console.log('busco en el disco... ' + filename);
fs.exists(filename, function (exists) {
if (!exists) {
console.log("no encuentro: " + filename);
notFound(res);
} else {
var mimeType = mimeTypes[extension];
res.writeHead(200, {
'Content-Type': mimeType
});
// stream de lectura
var fileStream = fs.createReadStream(filename);
// entubado hacia un stream de escritura
fileStream.pipe(res);
}
});
}
function notFound(res) {
res.writeHead(404, {
'Content-Type': 'text/html'
});
res.write("<html>");
res.write("<head>");
res.write("<meta charset='utf-8'>");
res.write("<title>Hola Mundo</title>");
res.write("</head>");
res.write("<body>");
res.write('<h1>404</h1> Nada por aquí');
res.write("</body>");
res.write("</html>");
res.end();
}

Просмотреть файл

@ -0,0 +1,101 @@
// un uso muy común de nodeJS
// es disponer de un servidor
// que publique el contenido estático de un directorio
"use strict";
// Ahora requeimos más módulos propios de NodeJS
var http = require('http'),
url = require('url'),
path = require('path'),
fs = require('fs');
// para informar al navegador sobre el tipo de documento que recibirá
var mimeTypes = {
"html": "text/html",
"png": "image/png",
"js": "text/javascript",
"css": "text/css"
};
http.createServer(staticServer).listen(3000);
function staticServer(req, res) {
// acceder a la url
var urlParseada = url.parse(req.url);
// y obtener la parte del path
var pathname = urlParseada.pathname;
console.log('me piden... ' + pathname);
if (pathname === "/") {
homePage(res);
} else {
fileServer(res, pathname);
}
}
function homePage(res) {
res.writeHead(200, {
"Content-Type": "text/html"
});
res.write("<html>");
res.write("<head>");
res.write("<meta charset='utf-8'>");
res.write("<title>Hola Mundo</title>");
res.write("</head>");
res.write("<body>");
res.write("<h1>Texto Hard-coded</h1><p>enviado por NodeJS al navegador<p> ;-)");
res.write("</body>");
res.write("</html>");
res.end();
}
/** función que devuelve un fichero a partir de una url*/
function fileServer(res, pathname) {
// obtener la ruta en disco a partir de la ruta web
var filename = path.join(process.cwd(), 'client', pathname);
var extension = path.extname(filename).split(".")[1];
if (!extension) {
extension = "html";
filename += "." + extension;
}
console.log('busco en el disco... ' + filename);
fs.exists(filename, ifExists);
console.log('aún no se si existe ' + filename);
// callbacak para cuando sepamos si existe o no
function ifExists(exists) {
if (exists) {
console.log("si que tengo: " + filename);
sendFile(res, extension, filename);
} else {
console.log("no encuentro: " + filename);
notFound(res);
}
}
}
function sendFile(res, extension, filename) {
var mimeType = mimeTypes[extension];
res.writeHead(200, {
'Content-Type': mimeType
});
// stream de lectura
var fileStream = fs.createReadStream(filename);
// entubado hacia un stream de escritura
fileStream.pipe(res);
}
function notFound(res) {
res.writeHead(404, {
'Content-Type': 'text/html'
});
res.write("<html>");
res.write("<head>");
res.write("<meta charset='utf-8'>");
res.write("<title>Hola Mundo</title>");
res.write("</head>");
res.write("<body>");
res.write('<h1>404</h1> Nada por aquí');
res.write("</body>");
res.write("</html>");
res.end();
}

Просмотреть файл

@ -1,31 +1,22 @@
// En este caso 'simulamos' una Clase instanciable
var CuentaExportable = (function(){
// un módulo puede a su vez requerir de otros
var Mates = require('./mates.js');
// En este caso 'simulamos' una Clase instanciable mediante una función
// La cuenta tendrá una función que acturá de constructor
var Cuenta = function (propietario) {
this.propietario = propietario;
this.saldo = 0;
console.log("creada cuenta para " + this.propietario + " con " + this.saldo + "€")
};
// un módulo puede a su vez requerir de otros
var Mates = require('./mates.js');
// una vez creada una variable, se le pueden agregar métodos y propiedades
Cuenta.prototype = {
ingresar: function(dinero){
this.saldo = Mates.sumar(this.saldo,dinero);
console.log("ingresar: " + dinero + " a " + this.propietario + " tiene " + this.saldo + "€");
},
retirar: function(dinero){
this.saldo = Mates.restar(this.saldo,dinero);
console.log("retirar: " + dinero + " a " + this.propietario + " tiene " + this.saldo + "€");
}
var Cuenta = function (propietario) {
this.propietario = propietario;
this.saldo = 0;
// a una funcion se le pueden agregar más métodos y propiedades
this.ingresar = function (dinero) {
// aquí this apunta al módulo, no a la función interna
this.saldo = Mates.sumar(this.saldo, dinero);
console.log("ingresar: " + dinero + " a " + this.propietario + " tiene " + this.saldo + "€");
}
this.retirar = function (dinero) {
this.saldo = Mates.restar(this.saldo, dinero);
console.log("retirar: " + dinero + " a " + this.propietario + " tiene " + this.saldo + "€");
}
}
return Cuenta;
})();
// se exporta la variable CuentaExportable,
// dicha variable apunta a una función que retorna un objeto
module.exports = CuentaExportable;
module.exports = Cuenta;

Просмотреть файл

@ -1,22 +1,22 @@
// Otro caso muy común es disponer de una
// Biblioteca de funciones de ayuda
var Matematicas = (function(){
return {
sumar: function(a,b){
return obtenerNumero(a) + obtenerNumero(b);
},
restar: function(a,b){
return obtenerNumero(a) - obtenerNumero(b);
}
// la variable es privada
var matematicas = {
sumar: function (a, b) {
return obtenerNumero(a) + obtenerNumero(b);
},
restar: function (a, b) {
return obtenerNumero(a) - obtenerNumero(b);
}
};
function obtenerNumero(texto){
return texto*1;
}
/** esta función es privada */
function obtenerNumero(texto) {
return texto * 1;
}
})();
// exportamos una variable
// que apunta a una función
// que devuelve un objeto
module.exports = Matematicas;
// exportamos la variable que queramos
module.exports = matematicas;

Просмотреть файл

@ -1,7 +1,8 @@
// El módulo http puede usarse para responder y para emitir llamadas
var http = require('http');
var llamada = {
host: 'agorabinaria.com'
host: 'agorabinaria.com'
};
console.log("Trabajo lento iniciado... ");
@ -14,28 +15,28 @@ trabajoRápido();
// Usando callbacks anónimos
function trabajoLento() {
http.get(llamada, function (res) {
console.log("Trabajo lento terminado: " + res.statusCode);
}).on('error', function (e) {
console.eror("Trabajo lento terminado: " + e.message);
});
http.get(llamada, function (res) {
console.log("Trabajo lento terminado: " + res.statusCode);
}).on('error', function (e) {
console.eror("Trabajo lento genera error: " + e.message);
});
}
function trabajoRápido() {
console.log("Trabajo rápido terminado :-) ");
console.log("Trabajo rápido terminado :-) ");
}
// Usando nombres y funciones
function trabajoLentoMejorado() {
// El código queda más legible si usamos funiones con nombre
http.get(llamada, alRecibirDatos)
.on('error', alRecibirError);
function alRecibirDatos(res) {
console.log("Trabajo lentoMejorado terminado: " + res.statusCode);
}
function alRecibirDatos(res) {
console.log("Trabajo lentoMejorado terminado: " + res.statusCode);
}
function alRecibirError(e) {
console.error("Trabajo lentoMejorado terminado: " + e.message);
}
// El código queda más legible si usamos funiones con nombre
http.get(llamada, alRecibirDatos)
.on('error', alRecibirError);
function alRecibirError(e) {
console.error("Trabajo lentoMejorado genera error: " + e.message);
}
}

Просмотреть файл

@ -7,23 +7,23 @@ var express = require('express');
var app = express();
var options = {
extensions: ['htm', 'html'],
maxAge: '1d',
setHeaders: function (res, path, stat) {
res.set('x-timestamp', Date.now())
}
extensions: ['htm', 'html'],
maxAge: '1d',
setHeaders: function (res, path, stat) {
res.set('x-timestamp', Date.now())
}
};
// Un uso muy frecuente es reservar ujna serie de rutas para derivarlas al disco
// Un uso muy frecuente es reservar una serie de rutas para derivarlas al disco
// Tendremos así un directorio para contenido estático
app.use(express.static(__dirname + '/static', options));
// Otro uso común es la monitorización de la aplicación
// Interceptor de llamadas
app.use(function (peticion, respuesta, siguiente) {
console.log("recibida petición: " + peticion.url);
// Es muy importante continuar el flujo hacia la sigueinte función
siguiente();
// En caso de no hacerlo, se colgaría la llamada
console.log("recibida petición: " + peticion.url);
// Es muy importante continuar el flujo hacia la sigueinte función
siguiente();
// En caso de no hacerlo, se colgaría la llamada
});
// También es habitual usarlas para sanear la entrada y securizar la aplicación
@ -31,7 +31,7 @@ app.use(function (peticion, respuesta, siguiente) {
// Tras atravesar las capas de middleware la llamda llegará al código de negocio
// Respuesta con una funión in-line a una petición concreta
app.get('/', function (peticion, respuesta) {
respuesta.send('Hola Express!');
respuesta.send('Hola Express!');
});
app.listen(3000);

Просмотреть файл

@ -1,11 +1,11 @@
{
"name": "holaexpress",
"version": "1.0.0",
"description": "",
"main": "1-hola-express.js",
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.12.0"
}
"name": "holaexpress",
"version": "1.0.0",
"description": "",
"main": "1-hola-express.js",
"author": "albertobasalo@agorabinaria.com",
"license": "ISC",
"dependencies": {
"express": "^4.12.0"
}
}