Primero, ¿Qué es node.js?, tomando la definición del sitio oficial, Node.js® es un entorno de ejecución para JavaScript construido con el motor de JavaScript V8 de Chrome. Node.js usa un modelo de operaciones E/S sin bloqueo y orientado a eventos, que lo hace liviano y eficiente. El ecosistema de paquetes de Node.js, npm, es el ecosistema más grande de librerías de código abierto en el mundo.

Vamos a describir la parte que nos interesa, Node.js es un programa, V8 es un motor de javascript de código abierto creado por Google, por lo que también lo hace un programa, V8 está escrito en C++, y la tarea de V8 es tomar código Javascript y convertirlo a código maquina (compilar código), pero lo que lo hace especial para nuestros fines es que puede ser embebido dentro de otros programas, lo que permite que V8 este embebido en Node.js, V8 por así decirlo es el punto de partida para toda la funcionalidad de Node.js.

Node.js también está escrito en C++ y utiliza la API de V8 para agregarle características y funcionalidades nuevas a Javascript. Estas nuevas funcionalidades permiten tener acceso al sistema de archivos y carpetas, nos permite crear un servidor http y TCP, además de acceso a POSIX, o sea, a toda la funcionalidad del sistema operativo donde se encuentre instalado.

Node.js proporciona la sintaxis Javascript para crear programas que tengan acceso a las características del sistema operativo donde sé está ejecutando.

Con esto podemos razonar que con Node.js podemos crear un servidor web, para crearlo, vamos a utilizar NPM (Node Package Manager) y express.js un frawework web.

Vamos a crear una nueva carpeta llamada mi-servidor-web, luego accede a esta carpeta con:

$ cd mi-servidor-web

Ahora vamos a iniciar el proyecto utilizando el siguiente comando:

$ npm init

La línea de comandos nos pedirá algunos datos, puedes dar “enter” a todos si quieres, te muestro un ejemplo:

Press ^C at any time to quit.
package name: (mi-servidor-web) 
version: (1.0.0) 
description: Mi primer servidor web
entry point: (index.js)
test command: 
git repository: 
keywords: 
author: Jaime Cervantes<jaime.cervantes.ve@gmail.com>
license: (ISC) 
About to write to /home/jaime/develop/node.js/mi-servidor-web/package.json:

{
  "name": "mi-servidor-web",
  "version": "1.0.0",
  "description": "Mi primer servidor web",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Jaime Cervantes <jaime.cervantes.ve@gmail.com>",
  "license": "ISC"
}


Is this ok? (yes) 

npm init nos genera un archivo package.json:

{
  "name": "mi-servidor-web",
  "version": "1.0.0",
  "description": "Mi primer servidor web",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Jaime Cervantes <jaime.cervantes.ve@gmail.com>",
  "license": "ISC"
}

Este archivo contiene la información anteriormente proporcionada y además se encarga de controlar los paquetes que instalamos para nuestro proyecto. Por ejemplo, para poder crear nuestro servidor rápidamente, vamos a instalar un paquete llamado express.js de la siguiente manera:

$ npm install express --save

Este comando instala express.js y además actualiza nuestro archivo package.json gracias al parámetro --save en la propiedad dependencies:

{
  "name": "mi-servidor-web",
  "version": "1.0.0",
  "description": "Mi primer servidor web",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Jaime Cervantes <jaime.cervantes.ve@gmail.com>",
  "license": "ISC",
  "dependencies": {
    "express": "^4.16.2"
  }
}

Ya teniendo express instalado, vamos a crear nuestro servidor web creando el archivo  ./mi-servidor-web/index.js:

const express = require('express');
const app = express();

app.use(express.static(__dirname + '/public/'));

app.listen('3000', function() {
  console.log('Servidor web escuchando en el puerto 3000');
});

Hay una parte importante que nos permitirá ver el funcionamiento de nuestro servidor web:

app.use(express.static(__dirname + '/public/'));

Esta línea le indica a nuestro servidor que cuando un usuario haga una petición de archivos estáticos, por ejemplo, http://localhost:300/index.html enviará como respuesta el contenido de ./public/index.html.

Vamos a crear la carpeta public y el archivo index.html con el editor de nuestro preferencia o en línea de comandos si lo deseas. Agregamos el siguiente contenido a nuestro archivo index.html:

<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Mi primer servidor web</title>
</head>
<body>
  <h1>HOLA, mi primer servidor web</h1>
</body>
</html>

Para ejecutar nuestro servidor nos posicionamos dentro de nuestra carpeta mi-servidor-web y ejecutamos el siguiente comando:

$ node index.js;

Veremos este mensaje en nuestra consola:

Servidor web escuchando en el puerto 3000

Por último abrimos nuestro navegador web y obtendremos nuestro index.html como la imagen de abajo, utilizando http://localhost:3000 o http://localhost:3000/index.html:

10 Comments

        1. Oh ya, pues hay varias plataformas de servicios en la nube, llamadas PaaS (Platform as a service), y que forma parte del término cloud computing, entre ellas se encuentran:

          – Google app engine
          – heroku
          – Amazon web services
          – Microsoft Azure

          Cada una tiene su propia manera de desplegar tu aplicación por lo que tendrías que ir a su documentación.

          También puedas rentar un servidor, un proveedor muy bueno es digital ocean, ahí debes configurar tu máquina servidor con nginx, para que este último funcione como servidor proxy y puedas tener accesible tu aplicación node.js montado en http://localhost:3000

  1. Hola, quiero probar mi aplicación web con el stack MEAN en mi red local, utilizo XAMPP para activar el frontend con angular pero el backend solo me funciona en mi PC,desde otra PC de la red no me carga los datos de la base de datos,que aplicacion me pudiera ayudar a desplegar el backend??

      1. Hola Jaime, gracias por la ayuda, pero no hay una solución para desplegar mi proyecto en una PC para ser vista desde la red local, sin tener que subirla a un servidor de internet, es que trabajo en un entorno empresarial,gracias de antemano.Saludos.

        1. Hola, solo necesitas node.js, levantas tu aplicación de node de igual forma que el ejemplo de esta publicación y en otra máquina desde un navegador apuntas a algo como

          http://192.168.1.79:3000

          Recuerda agregar el puerto que definiste en tu aplicación node.js con express, es decir:

          http://[ip]:[puerto]

  2. Hola tengo un front End que levanta la inf de files Csv con funciones javascript ahora me informaron que debo levantar la data de una BD Postgres que está en un server, pero no estoy pudiendo hacer la conexion estoy usando node.js pero nada. me podrias dar una mano que estoy haciendo mal.

    1. Hola Jor, te recomienda que subas tu proyecto a un repositorio como github, bitbucket o gitLab, para poderle echar un ojo y ayudarte. En un principio no debería haber problema hacer conexión hay varios paquetes que ya hacen el trabajo por ti, por ejemplo, https://node-postgres.com/features/connecting#Programmatic, pero entiendo que siempre paso algo imprevisto, me pasa muchas veces, así que si me puedes dar acceso al código para resolverlo juntos, hasta podríamos agendar una videollamada y hacer pair programming.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.