зеркало из https://github.com/DeGsoft/meanjs.git
NodeJS
This commit is contained in:
Родитель
432bac325b
Коммит
6734fa27f4
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче