Anuncios

Bienvenidos sean a este post, titulo largo pero ahora veremos porque.

Anuncios
Anuncios

Los modulos de node.js nos provee una forma simple de encapsulacion para esconder detalles de la implementacion mientras exponemos una API, en los modulos CommonJS la API expuesta se hace mediante la funcion export en cambio para los modulos ES6 se hace mediante la palabra clave export, todo lo demas dentro de modulo no estara disponible para el codigo externo, en la practica en los modulos CommonJS se los tratan como si estuvieran escritos de la siguiente manera:

(function(exports, require, module, __filename, __dirname) {
// Instrucciones del modulo van aqui...
}); 
Anuncios

Con esto podemos decir que todo lo que este dentro del modulo esta contenido en un contexto de namespace privado y anonimo, esta es la forma de resolver el problema del objeto global porque todo lo que parece global en el modulo esta contenido dentro de un contexto privado, a su vez explica como las variables son ingresadas dentro del modulo porque son parametros para la funcion que crea al modulo.

Anuncios

La otra ventaja es la seguridad del codigo, ya que el codigo privado esta escondido en un namespace privado haciendo imposible que el codigo externo pueda acceder a este, para entender este concepto vamos a crear un pequeño ejemplo, para ello debemos crear un archivo con el nombre de modulo.js y le agregaremos el siguiente codigo:

modulo.js

const A = "Valor A";
const B = "Valor B";

exports.valores = function() {
        return { A: A, B: B };
}
Anuncios

Aqui definimos dos constantes con dos valores y despues mediante export concederemos acceso a una variable que contendra el valor de las dos constantes, nuestro siguiente paso sera crear un nuevo archivo con el nombre codigo.js y le agregaremos el siguiente codigo:

codigo.js

const util = require('util');
const A = "otro valor A";
const B = "otro valor B";
const m = require('./modulo');

console.log(`A=${A} B=${B} valores=${util.inspect(m.valores())}`);
console.log(`${m.A} ${m.B}`);

const val = m.valores();

val.B = "algo totalmente diferente";
console.log(util.inspect(val));
console.log(util.inspect(m.valores()));
Anuncios
Anuncios

Primero definiremos un objeto para contener a util del cual utilizaremos el metodo inspect para inspeccionar los objetos que le informemos, despues definiremos dos constantes y por ultimo definiremos un objeto donde estara el modulo que creamos anteriormente, despues mostraremos primero los valores de las constantes y los valores que nos comparte el modulo que importamos, para luego mostrar los valores de las constantes A y B pero del modulo, lo siguiente sera crear un nuevo objeto pero que contendra los valores iniciales que nos pasa la parte publica del modulo, valores, lo siguiente sera tomar el valor de B de este nuevo objeto y lo cambiaremos para finalmente mostrar mediante inspect el contenido del objeto que definimos anteriormente, val, y luego el que nos devuelve el modulo, valores, con todo esto comentado veamos como trabaja:

tinchicus@dbn001vrt:~/lenguajes/node.js$ node codigo.js
A=otro valor A B=otro valor B valores={ A: 'Valor A', B: 'Valor B' }
undefined undefined
{ A: 'Valor A', B: 'algo totalmente diferente' }
{ A: 'Valor A', B: 'Valor B' }
tinchicus@dbn001vrt:~/lenguajes/node.js$
Anuncios

Primero tenemos los valores propios del codigo fuente y despues el objeto que nos comparte el modulo, despues tenemos dos undefined porque al no poder accceder a las constantes del modulo no poseen ningun valor para nuestro codigo, para finalmente ver como el valor modificado en el objeto creado de valores si se modifico pero este no afecto a los valores del modulo, como pueden ver no es un ejemplo practico pero si nos permite ver como cada modulo tiene su informacion protegida sin poner ninguno en riesgo pero un tema a tener en cuenta es que no todos los modulos son de codigo a veces puede ser datos pero eso sera un tema para el proximo post.

Anuncios

En resumen, hoy hemos visto es la encapsulacion entre modulos, es decir como podemos proteger la informacion en cada modulo, compartirla pero no necesariamente que sea accedida, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50