jueves, 11 de junio de 2015



PUBLICACIÓN DE MODULOS EN NODE

npm login
npm publish



APP DE EJEMPLO NODE EXPRESS - CONNECT - MONGO


Requerimientos:
- Tener instalado nodejs/npm.


PRIMER PASO - EXPRESS:
- Ejecutar comando siguiente: npm i -g express
- Ubicarse en la carpeta destino y ejecutar el comando: express default (este crea un esqueleto de carpetas y archivos predefinidos para una app).
- Ejecutar el siguiente comando: express -c stylus -e exp-styl-ejs (instala el preprocesador de css)


EJEMPLO DE AUTENTICACION EN NODE JS

/** MIDDLEWARE LOGIN
TIP: Iniciar el servidor de autenticador con NODE_ENV='ambiente(desa,prod)' node Autenticador **/


var connect = require('connect');
var app = connect();

function loggerHello(req, res, next){
foo();
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World Pana');
}

function logger(req, res, next){
//res.setHeader('Content-Type', 'text/plain');
//res.end('Este es el logger');
console.log('#logger en acción', req.method, req.url); next(); } function logger(req, res, next){ console.log('Iniciando... ', req.method, req.url); next(); } function authWithDB(user, pass, cb){ if(pass !== 'luis15'){ return cb('Credenciales incorrectas.');
}
cb();
}

function restrict(req, res, next){
var authorization = req.headers.authorization;
if(!authorization){
return next(new Error('No autorizado'));
}

var parts = authorization.split(' ');
var scheme = parts[0];
var auth = new Buffer(parts[1], 'base64').toString().split(':');
var user = auth[0];
var pass = auth[1];

authWithDB(user, pass, function (err) {
if(err){
return next(err);
}
next();
});
}

function admin(req, res, next){

console.log('ACCEDIENDO A: ',req.url);

switch(req.url){

case '/':
res.end('try /users');
break;

case '/users':
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(['Luis', 'JoseLuis', 'Jp']));
break;
}
}

function errorHandler() {

var env = process.env.NODE_ENV || 'desarrollo';
return function (err, req, res, next){
res.statusCode = 500;

switch (env){

case 'desarrollo':
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(err));
break;
default:
res.end('Server error');
}
};
}

app
.use(logger)
.use('/admin', restrict)
.use('/admin', admin)
.use(loggerHello)
.listen(3000);



EJEMPLO DE ORDENAMIENTO DE CALL BACKS EN NODE JS CON LA LIBRERIA ASYNC

var async = require('async');

async.waterfall([

function (cb){
artist.findEvents('Miley', cb);
},
function (concert, cb){
concert.findTickets({price: {$lt: 100}}, cb);
},
function (tickets, cb){
tickets.purchase({cc: 424242424242}, cb);
},
function (transaction, cb) {
email.confirm(customer, transaction, cb);
}
],

//FUNCTION RETORNO
function (null, status){
if(err){
res.send(err);
return false;
}

res.send({
tickets: 'purchased'
});
}
);//FIN WATERFALL

//PATRON PROMISES DE COMMONJS - promises-aplus.github.io/promises-spec/
artist.find('Miley')
.findEvents({city: 'Bogota'})
.findTickets({price: {$lt: 100}}, cb);
.purchase({cc: 424242424242}, cb);

.then (function(transaction) {
customer.transaction = transaction;
return customer.save();
})

.then (function (customer, transaction) {
return email.confirm(customer, transaction);
})

.then function(){
res.send({
tickets: 'purchased'
});
},

function (err) {
console.log('Ha habido un error', err);
}
);

EJEMPLO DE CALL BACKS DESORDENADOS

function startExecution() {
doSomethingAsync(function(error, result) {
doSomethingElseAsync(function(error, result) {
moreAsync(function(error, result) {
evenMoreAsync(function(error, result) {
// ... I think you got it
});
});
});
});
};

miércoles, 10 de junio de 2015



Librerías Clave en Node.js

Las librerías a continuación no son las únicas que existen, y no son camisa de fuerza; tu puedes usar las librerías que quieras y que se ajustan más a tus necesidades en https://npmjs.org/ encontraras muchos paquetes que puedes usar con su respectiva información.

Librerías globales SUPERVISOR https://github.com/isaacs/node-supervisor

$ npm install -g supervisor

Cuando estamos trabajando en Node es necesario tener que compilar el código cada vez que hacemos un cambio.

SUPERVISOR reinicia la aplicación ante cualquier cambio, con la ventaja de que al ocurrir cualquier error en nuestro código, el servidor continúa su ejecución; al producirse un error, “supervisor“ avisará en la consola y mantendrá el servidor siempre despierto.

NODE-INSPECTOR
https://github.com/node-inspector/node-inspector

$ npm install -g node-inspector

Node-Inspector es una interfaz de depuración de Node.js utilizando las herramientas de desarrollo Blink (ex WebKit Web Inspector).

El depurador Blink es una gran interfaz depuradora de javascript, que funciona igual de bien para Node. Nodo Inspector es compatible con casi todas las características de depuración de DevTools.

- Navegar en los archivos de origen
- Establecer puntos de interrupción
- Interrumpir en excepciones
- Continuar a la ubicación
- Desactivar / activar todos los puntos de interrupción
- Inspeccione ámbitos, variables, propiedades de objeto
- Editar las variables y propiedades de objeto


Debugging con node-inspector

1. En la terminal escribimos
$ node —debug ruta/a/tuprogram.js
2. Vamos a http://127.0.0.1:8080/debug?port=5858 en Chrome
Listo debería poder verse la fuente javascript de Node.

FOREVER

https://github.com/nodejitsu/forever

Este la forma de correr demonios en Node, es una herramienta CLI para asegurar que un paquete determinado de node se ejecuta continuamente.

$ npm install -g forever

Nota: Para instalar forever se debe ser el administrador (sudo)

Hay dos formas distintas de utilizarlo siempre: a través de la interfaz de línea de comandos, o exigir el módulo para siempre se ejecute en su propio código.

Nota: Con FOREVER podemos mantener en constante ejecución a node-inspector, y si queremos cambiarlo de puerto.

Librerías locales UNDERSCORE
http://underscorejs.org/

$ npm install underscore --save

Underscore.js es una biblioteca de utilidades para JavaScript que proporciona apoyo a los sospechosos habituales funcionales (each, mapa, reducir, filtros ...) sin extender cualquier objeto de JavaScript.

SWIG
http://paularmstrong.github.io/swig/

$ npm install swig --save

Es un motor de plantillas basado en Node y Javascript; al igual que en Django en los templates se trabaja con Tags {% %} y Filtros {{ }} para construir las plantillas.
Ej.
{% block title %}Backend pro{% endblock %} {% block head %} {% endblock %} {% block content %}{% endblock %} Luego de construir la plantilla se renderiza en el server.

1. Requiere el paquete swig en el servidor.
swig = require('swig'); 2. Construir la vista del motor, para renderizar tu plantilla
server.engine('html', swig.renderFile ); 3. Renderizar los templates
server.set('views', './app/views');

Nota: Se esta usando Swig con Express.

CONNECT-REDIS
https://github.com/visionmedia/connect-redis

$ npm install connect-redis –save
Es un paquete de Node que sirve para almacenar sesiones de Redis soportado por node_redis y es increíblemente rápido.

lunes, 8 de junio de 2015



INTRODUCCIÓN A NODEJS

Node debe ser utilizado para aplicaciones en tiempo real básicamente.

Requerimientos:

- NodeJs Descargar - Sublime Text (opcional) Descargar

INSTALACIÓN DE NODE JS

Instalación de Nodejs en Windows, Mac y Linux

Windows
Paso 1: Ir a http://nodejs.org
Paso 2: Descargar el archivo
Paso 3: Instalar NodeJs
Paso 4: Buscar en sus programas instalados: "Node.js Command Prompt"
Paso 5: Teclear node -v para comprobar que se instalo

Deberan tener v0.8.x

Mac

Paso 1: Ir a http://nodejs.org
Paso 2: Descargar el archivo
Paso 3: Instalar NodeJs
Paso 4: Abrir el programa "Terminal"
Paso 5: Teclear node -v para comprobar que se instalo

Deberan tener v0.8.x

Ubuntu

Paso 1: Abrir la terminal
Paso 2: Instalar dependencias así:
> sudo apt-get install build-essential git-core libssl-dev libssl0.9.8Paso 3: Descargar Node
> git clone git://github.com/joyent/nodeDespués entra al folder que acabas de descargar con:
> cd node
Paso 4: Pasar a NodeJs 0.8.4
> git checkout v0.8.4 Paso 5: Compilar e instalar NodeJs
> ./configure
> make
> sudo make installPaso 6: Teclear node -v para comprobar que se instalo

Deberan tener v0.8.x

Node puede estar presente en cualquier carpeta de tu ordenador, como contenedor de apps, solo necesitas un archivo .js y un package.json con la información de la app, ejemplo:

{ "name": "NombreDeTuApp", "version": "0.0.1", "dependencies": { "express" : "3.0.3", "jade" : "0.27.7", "consolidate" : "0.5.0", "socket.io" : "0.9.11" } }

Posteriormente, ejecutar comando: npm install y node instalará las dependencias(librerías) automáticamente...


Imagen 1: Uso de depedendencia xpress, como servidor.

PRIMER ARCHIVO - INICIO DE CONTENEDOR DE APLICACION NODE

EJECUTAR COMANDO DE CONSOLA: node + nombre de archivo

/**EJEMPLO 1 FIRST.JS **/

var http = require('http'); var fs = require('fs'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'image/png'}); fs.createReadStream('../assets/nodejs.png').pipe(res); }).listen(3000); console.log('Server running at http://127.0.0.1:3000');

--------------------------------------------------------------------------------

/** EJEMPLO MODULO PPAL **/

var luis = require('./myModule'); var info2 = require('./info2'); module.exports = { luis : luis, john: { name: 'John Liberal', songs: ['Jeremy', 'Black Hole Sun'], events: ['Beijing', 'Caracas'] }, pam: pam };
/** EJEMPLO INFO2 QUE CONSUME MODULO PPAL **/
var edad = 20; var estado = 'soltera'; function sing(){ console.log('lalalalalal'); } function cry(){ console.log('boo boo boo'); } function getArrested(){ console.log('arrestada'); } module.exports = { sing: sing, cry: cry, getArrested: getArrested, estado: estado };

-----------------------------------------------------------------

/** EJEMPLO LECTURA DE ARCHIVOS **/

/** SECOND.JS **/

var fs = require('fs'); var stream = fs.createReadStream('../assets/events.json'); //CODIFICANDO LOS CARACTERES DEL ARCHIVO A LEGIBLES stream.setEnconding('utf8'); //INICIANDO STREAM stream.on('data', function (chunk) { console.log(chunk); }); //FINALIZANDO STREAM stream.on('end', function () { console.log('finished'); });

-------------------------------------------------------------------

/** EVENTS.JSON **/

{"menu": { "id": "file", "value": "File", "popup": { "menuitem": [ {"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"} ] } }}
Subscribe to RSS Feed Sígueme en twitter!