Simple servidor HTTP con NodeJS

En algún momento necesitamos crear un pequeño proyecto de pruebas o algo sencillo, y configurar un VHOST en Apache simplemente lleva algo de tiempo que uno no quiere gastar, o simplemente el hecho de estar modificando la configuración de un servidor, en lugar de estar ejecutando un servicio nuevo, y creo que más que todo esa segunda parte es la que no me gusta.

Iniciando con NPM

Tenemos dos opciones para esto, y la primera es hacer manualmente el archivo  package.json o ejecutar desde la consola el NPM (Node Package Manager), y en éste caso usaremos el NPM. Así que:

  1. cd /path/al/directorio/deseado
  2. npm init

Luego de ello te hará una serie de preguntas que serán los valores guardados en el archivo package.json generado. Ten en cuenta que cuando te pida el valor para name sea una cadena de caracteres sin espacios en blanco.

Al final obtendrás un archivo con contenido similar a este:

{
  "name": "miproyecto",
  "version": "1.0.0",
  "description": "Éste es un nuevo proyecto de prueba",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js"
  },
  "author": "Eglador",
  "license": "ISC"
}

Luego lo siguiente que necesitaremos es tener Express a nuestro proyecto. Lo que usaremos de Express es su Middleware express.static que es el responsable de servir contenido estático en nuestra aplicación web.

Para ello entonces ejecutamos:

npm install express

Recuerda que sin el parámetro g npm lo que hace es instalar express de forma local en nuestro proyecto, dentro del directorio node_modules. Recuerda que éste directorio no lo debes agregar en tu repositorio de versionado, que en Git deberás añadirlo al archivo .gitignore.

Luego de la instalación, debes añadir la información de Express al package.json como dependencia, para que en cada ocasión que clones o hagas delpoy, siempre se instale la misma versión de tus dependencias y todas las dependencias, para ello ejecuta:

npm install express --save

El resultado final debería ser similar a éste, teniendo en cuenta que la versión que se muestra es la actual a la fecha en que se escribió el post:

{
  "name": "miproyecto",
  "version": "1.0.0",
  "description": "Éste es un nuevo proyecto de prueba",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js"
  },
  "author": "Eglador",
  "dependencies": {
    "express": "^4.10.2"
  }
}

Creando nuestro pequeño servidor

Bien, teniendo instaladas las dependencias para nuestro servidor, sólo falta escribirlo, y la verdad es que no es muy difícil.

Como lo especificamos en package.json, crearemos un archivo server.js y dentro de él escribimos:

var express = require('express');
 
var server = express();
server.use(express.static(__dirname + '/public'));
 
var port = 3001;
server.listen(port, function() {
    console.log('server listening on port ' + port);
});

Con ésto, mediante el middleware static, le estamos diciendo a Express que en nuestro directorio actual existe un subdirectorio public en en cual se encuentra el contenido que deseamos servir. Ademas asignamos 3001 a la variable port, que puede ser cualquier número de puerto que deseemos utilizar, y le decimos al servidor que escuche por ese puerto.

Si bien no estamos estableciendo ningún archivo para ser llamado por defecto, la verdad es que el middleware busca por defecto un index.html.

Con esto podemos hacer un:

http://localhost:3001/index.html

y tendremos nuestro pequeño sitio estático funcionando.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s