Hace algún tiempo y después de leerme como cinco veces todo el manual de Nodejs, casi que no logro encontrar las variables de sistema y las variables de proceso. Por aquí les dejo ejemplos de uso Y tucos varios para descrestar!!

Variables globales para proceso


Código Javascript :

GLOBAL.miVariable = "Lo que yo quiera";
console.log(GLOBAL); // Es un JSON 

Allí por lo regular coloquen todas las Librerías y cosas que utilizan en todo momento (Yo coloco hasta la coneccion con bases de datos)

Código Javascript :

GLOBAL.os = require('os');
GLOBAL.fs = require('fs');
GLOBAL.url   = require('url');
GLOBAL.sys   = require('sys');
GLOBAL.http = require('http');
GLOBAL.util = require('util');
// La forma de llamarlo es asi
fs.readFile(...);
url.parser(...);
os.dirTemp();

Muy util!! por que cuando la aplicación pesa mas de 3 MB

El metodo Process


Este es extraño por que nadie lo utiliza ni lo toma enserio. El porque por que nadie sabe como modificar los procesos, desde el motor V8. Pero lo genial es que se puede hacer muchísimo. Un par de ejemplos

Código Javascript :

process.on('exit', function() {
  console.log('Se murio');  // Cuando se muere el proceso
});
process.stderr.on("data", function(data){
  console.log('Hubo error'); // Cuando ahy error de proceso
})
process.title = "MiProceso"; // Le cambiamos el nombre al proceso
process.exit(this) // Matamos el proceso un suicidio

En cual quiera de los métodos, podemos enviar Email o hacer tuits del estado del servidor, así la administración es mas sencilla.

Procesos en Cluster


Nota : Esto es experimental

Los este tipo de procesos es que hace una Fork de los proceso y así todo el PC responde. Si uno de los procesos se muere o no responde se tienen mas procesos para que siga funcionado el servidor. Esto puede ayudar cuando haga ataques DDOS o cuando simplemente estemos en fases BETA. Funciona asi

Código Javascript :

var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length; // Cantidad de Procesadores
if (cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork(); // hace fork
  }
  cluster.on('exit', function(worker, code, signal) {
    console.log("Trabajador muerto! "  + worker.process.pid + ' died');
  }).on("online", function(work){
    console.log('Trabajador en linea ' + worker.process.pid );
  });
} else {
  // Esto haran los trabajadores
  http.createServer(function(req, res) {
    res.writeHead(200);
    res.end("hello world\n");
  }).listen(8000);
}

Con esto si se les cae la aplicación es por que no hicieron bien la aplicación o todavía existen fallas como en Socket.io. Aqui les dejo otra forma de hacerlo

Código Javascript :

var cp = require('child_process'); // Procesos alternos
var n = cp.fork(__dirname + '/sub.js'); // Construimos un proceso alterno y lo ejecutamos
n.on('message', function(m) { 
  console.log('PARENT got message:', m); 
});
n.send({ hello: 'world' });


Ejecutarlo como un comando!


Ojojojo... Eso es un truco aunque no pertenece como tal Nodejs, pero si a NPM. Así se ve mas bonito nuestro software y le diremos a nuestro cliente "es mas practico que usted tenga un comando". Y se así!! Creamos un archivo llamado "package.json" en la raíz del proyecto (Debemos subir ese archivo por que es el mas importarte!)

Código :

{
   "name"     : "ElNombreDeLaApp",
   "version"   : "0.0.1",
   "description": "Descripción",
   "private"   : true,
   "status"   : "development", // Esto solo es si esta en desarrollo
   "author"   : "MiNombre",
   "analyze"   : true,
   "help"        : "La ayuda básica",
   "repository"   : {
      "type"   : "git",
      "url"      : "[email protected]:MiNombre/LaApp.git"
   },
   "scripts"   : {
      "prestart"    : "./bin/comand prestart", // processo de antes de ejecucion
      "postinstall": "node bin/post.js" // Proceso POST instalacion
   },
   "bin"   : {
      "MiComando"   : "bin/MiComado"
   },
   "engines"   : {
      "node"   : ">=0.8.6",
      "npm"   : ">=1.1.59"
   },
   "dependencies"   : {
      "commander"         : ">=1.0.0",
      "masdepedncias"      : "*",
      "maslibrerias": "*"
   }
}

Crearemos una carpeta llamada "bin", allí crearemos un archivo llamado "MiComado", sin extencion. (No se si en Win toca con .bat)

Código :

#!/usr/bin/env node
// Y escribimos en javascript

Y para quedar mejor con el cliente, le decimos por favor instale "nodejs" y "git". Y ejecute este comando

Código :

[ sudo ] npm install -g [email protected]:MiNombre/LaApp.git 

Taran... taran!! tenemos un comando personalizado desde Nodejs!!

Que tal esos trucos!!! Les gusto??