lunes, 24 de octubre de 2011

node.js con windows. Instalar paquetes sin npm

Hoy tuve la necesidad de hacer un pequeño programilla con node.js. Tenía que hacerlo rapidito y en windows, que era lo que tenía a mano en ese momento. Me descargué la version de node.js ejecutable en windows, la versión unstable v.0.5.10. Hasta ahí todo bien.

Necesitaba utilizar el módulo http-proxy de nodejitsu (https://github.com/nodejitsu/node-http-proxy) y entonces me di cuenta de que no tenía a mano npm para descargarlo. Podía instalarlo, pero necesitaría instalar antes cygwin, etc. etc. etc y no tenía ni tiempo de ganas para probar en ese momento. Afortunadamente, npm no es necesario para instalar librerías (te acostumbras tan rápido a usar npm que a veces ni se te ocurre que se puede trabajar con node sin él), porque manualmente resulta bastante trivial.

El primer paso fue crear la carpeta node_modules donde tenía el fichero que quería ejecutar con node.

El segundo paso, para instalar los el módulo http-proxy, fue descargar la última versión de github, en un fichero llamado "nodejitsu-node-http-proxy-v0.7.3.7-gcdb4524.zip".  Lo descomprimí dentro de la carpeta node_modules, y renombre la carpeta nodejitsu-node-http-proxy-v0.7.3.7-gcdb4524 a http-proxy, que es la referencia que vamos utilizar en los ficheros js ( require("http-proxy") ).

Todavía no estaba listo, porque al no usar npm, no se descargaron las dependencias de http-proxy. Si ejecutamos un fichero con http-proxy, node se quejará de que faltan dichas dependencias. Para localizarlas, consultarmos el fichero node_modules/http-proxy/package.json. En la propiedad "dependencies" vemos que http-proxy depende de colors, optimist y pkginfo.

Repetí la operación para esas tres librerías y ya me pude centrar en desarrollar el código de mi proxy inverso.

La estructura quedó de la siguiente manera

carpeta aplicación
├── fichero.js
└── node_modules
        ├── http-proxy
        ├── pkginfo
        ├── optimist
        └── colors


Pd. Las otras tres librerías están en:

jueves, 20 de octubre de 2011

Cómo utilizar npm

Algunas instrucciones útiles de npm.

1. Instalar "cosas". Por ejemplo "http-proxy" como en el último post:

npm install http-proxy


2. Averiguar lo que hay instalado

npm ls

Por ejemplo:

/Users/yo/Documents/nodetest
├─┬ http-proxy@0.7.3
│ ├── colors@0.5.1
│ ├─┬ optimist@0.2.8
│ │ └── wordwrap@0.0.2
│ └── pkginfo@0.2.2
└─┬ vows@0.5.11
  └── eyes@0.1.6

3. Actualizar paquetes instalados

npm update

Actualiza los paquetes con los siguientes criterios:
  • Busca en el registro actualizaciones de los paquetes instalados
  • Si hay nuevas versiones las instala
  • Revisa las dependencias, borrando las versiones viejas de las que no dependa nada
4. Conseguir fama

npm publish


Pero antes de publicar, habrá que preparar algo merecedor de dicha fama :)



Proxys inversos con node.js

Voy a crear unos proxys inversos triviales con node.js

Empezamos montando un servidor en el puerto 9000. En el fichero proxy-test.js:

var http = require("http");  
http.createServer(function (req, res) { 
  res.writeHead(200, { 'Content-Type': 'text/plain' }); 
  res.write('Respuesta en servidor original! ' + '\n' + JSON.stringify(req.headers, true, 2)); 
  res.end(); 
}).listen(9000); 



Arrancamos el servidor:

node proxy-test.js

Accediendo a http://localhost:9000/ deberíamos ver algo como:


Respuesta en servidor original! 
{
  "host": "localhost:9000",
  "connection": "keep-alive",
  "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1",
  "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
  "accept-encoding": "gzip,deflate,sdch",
  "accept-language": "es-ES,es;q=0.8",
  "accept-charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3"
}


A continuación nos descargaremos una librería para el proxy inverso, con lo que no reinventamos la rueda. Se trata de la libreria http-proxy que podemos encontrar en https://github.com/nodejitsu/node-http-proxy.

Para instalarla utilizamos npm:

npm install http-proxy

Con una instalación correcta veremos algo como:

http-proxy@0.7.3 ./node_modules/http-proxy
├── colors@0.5.1
├── pkginfo@0.2.2
└── optimist@0.2.8


Creamos en el fichero proxy-test.js el proxy inverso referenciando la librería e instanciandolo con una sencilla sentencia.

var httpProxy = require("http-proxy"); 
httpProxy.createServer(9000, 'localhost').listen(8000); 


Arrancamos node y accedemos a http://localhost:8000 y deberíamos los mismo que accediendo al puerto 9000.




lunes, 17 de octubre de 2011

Como instalar npm

npm (node package manager) es un gestor de paquetes de node.js, que nos permite descargar librerías y enlazarlas o descargar programas de js. En mi caso lo descubrí porque quiero empezar a desarrollar en node.js con TDD o BDD (mejor) y buscando encontré una librería para hacer BDD con node.js. Para instalarla recomendaban utilizar npm.

El proyecto está ubicado aquí: https://github.com/isaacs/npm . Para instalarlo es tan sencillo como introducir lo siguiente en una venta de terminal:

git clone http://github.com/isaacs/npm.git 
cd npm 
sudo make install 

y ya está. Para comprobar si está instalado correctamente, tecleamos en el terminal:

npm


y deberíamos ver las instrucciones de uso.

PD. La librería para hacer BDD con node.js es Vows ( http://vowsjs.org ), o sea, promesas en español

Para instalarla es tan sencillo como:

 npm install vows

Abrir carpeta actual del terminal en finder

Pequeño truco que he aprendido hoy: cómo abrir la carpeta actual del terminal en finder:

open .

Con esta sentencia se abre el finder justo en la carpeta que se tenga en el terminal (pwd)

domingo, 16 de octubre de 2011

Como instalar node.js

Acabo de pasarme de windows a mac y quiero aprender a utilizar node.js en este entorno así como todas las utilidades que proporciona mac y de las que no tengo ni idea.

Lo primero instalar node.js.

Abro un terminal y ejecuto:


git clone git://github.com/ry/node.git
cd node
./configure
make
sudo make install


Y listo instalado. Para probarlo creo un fichero para probar node.js. Le llamo hello.js:



var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World!\n');
}).listen(8000);
console.log('Server running at 8000');



En el terminal ejecuto:

node hello.js


Y con safari accedo a http://localhost:8000 y, "tachán", instalado y funcionando