Crear y ejecutar un proyecto Express.js con ServBay
¿Qué es Express.js?
Express.js es un framework web rápido, abierto y minimalista basado en Node.js. Ofrece un conjunto de potentes características para construir aplicaciones web de una sola página, multipágina e híbridas. Express.js es uno de los frameworks más populares en el ecosistema de Node.js, y es apreciado por los desarrolladores por su diseño sencillo y flexible.
Principales características y ventajas de Express.js
- Simplicidad y flexibilidad: Express.js proporciona una API sencilla y un mecanismo de middleware flexible, lo que hace que el desarrollo web sea muy eficiente.
- Middleware: Soporta multitud de middlewares, lo cual permite gestionar fácilmente solicitudes y respuestas, como por ejemplo, análisis de cuerpos de las solicitudes, manejo de sesiones, provisión de archivos estáticos, etc.
- Ruteo: Potente sistema de rutas que gestiona solicitudes según métodos HTTP (GET, POST, PUT, DELETE, etc.) y paths de URL.
- Alta integración: Se integra sin problemas con diversos motores de plantillas (como Pug, EJS, Handlebars), bases de datos (como MongoDB, MySQL, PostgreSQL) y otros módulos de Node.js.
- Comunidad y ecosistema: Dispone de una gran comunidad y abundante soporte de middlewares y plugins de terceros, facilitando la búsqueda de soluciones y recursos ante cualquier problema.
Con Express.js, los desarrolladores pueden construir rápidamente aplicaciones web y APIs de alto rendimiento. ServBay, como un potente entorno local de desarrollo web, proporciona un entorno Node.js conveniente y potentes herramientas de administración de sitios (proxy inverso) y bases de datos para proyectos Express.js.
Crear y ejecutar un proyecto Express.js con ServBay
Esta guía te mostrará cómo crear, configurar y ejecutar un proyecto Express.js usando el entorno Node.js de ServBay. Utilizaremos la función de sitios web de ServBay para establecer el servidor web y, mediante el proxy inverso, acceder al proyecto. Este método es especialmente adecuado para aplicaciones que requieren un servicio corriendo en un puerto específico, como Node.js, Python, Go o Java.
Prerrequisitos
Antes de comenzar, asegúrate de cumplir con los siguientes requisitos:
- Tener ServBay instalado exitosamente en macOS.
- Haber instalado y habilitado el paquete de Node.js en ServBay. Puedes gestionarlo en la pestaña “Paquetes” del panel de control de ServBay.
- (Opcional) Si planeas conectar una base de datos, asegúrate de instalar y habilitar los paquetes de base de datos necesarios en ServBay, como MariaDB, PostgreSQL, MongoDB o Redis, MySQL.
- Disponer de conocimientos básicos sobre el uso de terminal o línea de comandos.
Crear un proyecto Express.js
Inicializar el proyecto
Abre la terminal y navega al directorio raíz recomendado para sitios web en ServBay:
/Applications/ServBay/www
. Luego, usa el comandonpx express-generator
para generar rápidamente la estructura base de un proyecto Express.js.npx
es una herramienta incluida con npm v5.2+ para ejecutar ejecutables de paquetes Node.js.bashcd /Applications/ServBay/www npx express-generator servbay-express-app
1
2Esto creará una nueva carpeta llamada
servbay-express-app
dentro de/Applications/ServBay/www
, que contendrá la estructura básica del proyecto Express.js.Instalar las dependencias del proyecto
Entra al directorio recién creado
servbay-express-app
y ejecutanpm install
para instalar las dependencias necesarias, incluyendo el propio framework Express.js, el motor de plantillas y el servicio de archivos estáticos, entre otros.bashcd servbay-express-app npm install
1
2Espera a que termine la instalación de dependencias.
Modificar el contenido de salida del proyecto Express.js
Para comprobar que el proyecto funciona correctamente, vamos a modificar la salida por defecto de la página de inicio.
Modifica el archivo
routes/index.js
Los proyectos Express.js suelen utilizar archivos de rutas para manejar las diferentes solicitudes URL. Abre el archivo
routes/index.js
en el directorio del proyecto. Este archivo gestiona las solicitudes GET a la raíz/
. Modifica el código para que, en vez de renderizar la plantilla Pug por defecto, envíe una simple respuesta de texto.javascriptvar express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { // Modificar para enviar una respuesta de texto res.send('Hello ServBay!'); }); module.exports = router;
1
2
3
4
5
6
7
8
9
10Guarda el archivo.
Iniciar el modo desarrollo
Durante el desarrollo, normalmente ejecutamos un servidor local para ver los cambios en tiempo real. Los proyectos Express.js se pueden iniciar usando el comando npm start
.
Ejecutar el servidor de desarrollo
En la carpeta raíz del proyecto
servbay-express-app
, ejecuta el siguiente comando para iniciar el servidor de desarrollo. Estableceremos la variable de entornoPORT
al puerto8585
. La variableDEBUG
habilita la salida de información de depuración.bashcd /Applications/ServBay/www/servbay-express-app PORT=8585 DEBUG=servbay-express-app:* npm start
1
2La terminal mostrará información del servidor, indicando que el proyecto Express.js está escuchando en el puerto
8585
.Configurar el proxy inverso de sitios web en ServBay
Dado que la aplicación Express.js se ejecuta en un puerto personalizado (8585), y no en los puertos web estándar (80/443), necesitamos configurar un proxy inverso en la sección de sitios web de ServBay. El servidor web de ServBay (por defecto Caddy) escuchará en los puertos 80/443 y reenviará las solicitudes de un dominio específico al app Express.js corriendo en
127.0.0.1:8585
.Abre el panel de control de ServBay, ve a la pestaña “Sitios web” y haz clic en añadir un nuevo sitio. Configura los campos así:
- Nombre:
My first Express.js dev site
(un nombre descriptivo) - Dominio:
servbay-express-test.servbay.demo
(usando.servbay.demo
aprovechas la CA de usuario de ServBay y HTTPS automático) - Tipo de sitio: elige
Proxy inverso
- IP:
127.0.0.1
(olocalhost
) - Puerto:
8585
(el puerto donde escucha tu app Express.js)
Guarda y aplica los cambios de ServBay. El sistema configurará automáticamente el servidor web y generará el certificado SSL (para dominios
.servbay.demo
).Para instrucciones detalladas, consulta la guía de añadir un sitio de desarrollo Node.js en la documentación de ServBay.
- Nombre:
Acceder al sitio en modo desarrollo
Abre tu navegador y visita el dominio que configuraste:
https://servbay-express-test.servbay.demo
. El servidor web de ServBay recibirá la solicitud y la enviará por proxy al app Express.js en el puerto 8585. Deberías ver en la página el mensaje "Hello ServBay!".Como ServBay soporta dominios personalizados y certificados SSL gratuitos (con HTTPS automático para
.servbay.demo
), puedes usar HTTPS fácilmente en tu entorno local, acercándote de esta manera al entorno de producción y facilitando la detección de posibles problemas.
Desplegar versión de producción
Cuando tu proyecto Express.js esté listo, podrás prepararlo para producción. Simular la ejecución en producción localmente ayuda con las pruebas finales.
Preparar el entorno de producción
Por lo general, en producción se debe configurar la variable de entorno
NODE_ENV
con el valorproduction
. Esto afecta el comportamiento de algunas dependencias y optimiza rendimiento, deshabilita la depuración, etc. Asegúrate de que tu código responde correctamente aNODE_ENV=production
.Ejecutar el servidor en modo producción
Desde la raíz del proyecto
servbay-express-app
, ejecuta el siguiente comando para iniciar un servidor simulando el entorno de producción. Utilizaremos el puerto8586
para diferenciarlo del desarrollo y estableceremosNODE_ENV
enproduction
.bashcd /Applications/ServBay/www/servbay-express-app PORT=8586 NODE_ENV=production npm start
1
2La terminal mostrará que el servidor está corriendo y escuchando el puerto
8586
.Configurar proxy inverso para producción
Igual que en desarrollo, añade en ServBay otro sitio en proxy inverso, pero para producción.
Ve al panel de control de ServBay, pestaña “Sitios web”, y añade un nuevo sitio:
- Nombre:
My first Express.js production site
- Dominio:
servbay-express-test-prod.servbay.demo
(o el dominio que prefieras simular para producción) - Tipo de sitio:
Proxy inverso
- IP:
127.0.0.1
- Puerto:
8586
(puerto del servidor de producción Express)
Guarda y aplica los cambios.
- Nombre:
Acceder al sitio en modo producción
En el navegador, visita
https://servbay-express-test-prod.servbay.demo
. Serás redirigido por el proxy inverso de ServBay al servidor Express.js escuchando en el puerto 8586. Esto facilita probar el comportamiento real de la app en modo producción localmente.
Conexión a bases de datos
ServBay proporciona soporte para múltiples bases de datos a través de paquetes como MariaDB, PostgreSQL, MongoDB y Redis. Si tienes activados estos servicios en ServBay, tu app Express.js puede conectarse fácilmente. Por defecto, ServBay configura usuarios y contraseñas estándar, por ejemplo, el usuario root
en MariaDB/MySQL con contraseña password
, en PostgreSQL el usuario user
, contraseña password
y base de datos por defecto servbay_default
. Consulta la interfaz de ServBay para ver credenciales y configuración.
A continuación, ejemplos de conexión desde Express.js. Asegúrate de instalar el paquete Node.js correspondiente usando npm install <nombre-paquete>
.
Conectar con MongoDB
Primero, instala el driver
mongoose
(ORM popular para MongoDB):bashnpm install mongoose
1Luego, en tu código Express.js (por ejemplo, en
app.js
o un archivo de configuración de BD):javascriptvar mongoose = require('mongoose'); // Conectar a una instancia local de MongoDB, base de datos servbay-express-app // Por defecto, MongoDB en ServBay no requiere autenticación mongoose.connect('mongodb://localhost/servbay-express-app', { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('Connected to MongoDB')) .catch(err => console.error('MongoDB connection error:', err));
1
2
3
4
5
6
7
8
9
10Asegúrate de que el paquete MongoDB está iniciado en ServBay.
Conectar con Redis
Primero, instala el cliente
redis
:bashnpm install redis
1En tu código:
javascriptvar redis = require('redis'); // Por defecto, Redis corre en localhost:6379 sin contraseña en ServBay var client = redis.createClient({ host: 'localhost', port: 6379 }); client.on('connect', function() { console.log('Connected to Redis'); }); client.on('error', function (err) { console.log('Redis Error: ' + err); }); // Ejemplo: establecer y obtener valores // client.set('mykey', 'Hello from Express!', redis.print); // client.get('mykey', function(err, reply) { // if (err) throw err; // console.log(reply); // Imprimirá "Hello from Express!" // }); // Utiliza el objeto client para operar con Redis cuando lo necesites
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23Verifica que el paquete Redis está iniciado en ServBay.
Conectar con MariaDB / MySQL
ServBay soporta ambos MariaDB y MySQL. Se conectan normalmente usando los paquetes
mariadb
omysql2
. Aquí usamosmariadb
, que también puede conectar a MySQL.Primero, instala
mariadb
omysql2
:bashnpm install mariadb # o npm install mysql2
1Usa las credenciales por defecto de ServBay. Para MariaDB/MySQL, el usuario
root
y la contraseñapassword
.javascriptvar mariadb = require('mariadb'); // Por defecto, MariaDB/MySQL corre en localhost:3306 en ServBay var pool = mariadb.createPool({ host: 'localhost', port: 3306, // Puerto por defecto user: 'root', // Usuario por defecto de ServBay password: 'password', // Contraseña por defecto ServBay database: 'servbay_express_app', // Puedes crear esta BD desde las herramientas de ServBay connectionLimit: 5 // Tamaño del pool }); pool.getConnection() .then(conn => { console.log("Connected to MariaDB/MySQL"); // El objeto conn se usa para consultar // conn.query("SELECT 1").then(...).catch(...).finally(() => conn.release()); conn.release(); // Liberar la conexión de vuelta al pool }) .catch(err => { console.log("Not connected due to error: " + err); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Antes de conectar, puedes crear la base de datos
servbay_express_app
usando las herramientas de ServBay (phpMyAdmin, Adminer, etc). Verifica que MariaDB o MySQL están en funcionamiento.Conectar con PostgreSQL
Primero, instala el paquete cliente de PostgreSQL
pg
:bashnpm install pg
1Utiliza las credenciales por defecto de ServBay: usuario
user
, contraseñapassword
, base de datosservbay_default
.javascriptvar { Pool } = require('pg'); // Por defecto, PostgreSQL se ejecuta en localhost:5432 en ServBay var pool = new Pool({ user: 'user', // Usuario por defecto host: 'localhost', database: 'servbay_default', // Base de datos por defecto, puedes crear otras password: 'password', // Contraseña por defecto port: 5432, // Puerto por defecto }); pool.connect((err, client, done) => { if (err) { console.error('PostgreSQL connection error:', err); return; } console.log('Connected to PostgreSQL'); // El objeto client se usa para consultar // client.query('SELECT NOW()', (err, res) => { ... done(); }); done(); // Liberar la conexión }); // Alternativamente con async/await // try { // const client = await pool.connect(); // console.log('Connected to PostgreSQL'); // // const res = await client.query('SELECT NOW()'); // // console.log(res.rows[0]); // client.release(); // Liberar la conexión // } catch (err) { // console.error('PostgreSQL connection error:', err); // }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31Asegúrate de que PostgreSQL está iniciado en ServBay.
Resumen
Siguiendo estos pasos, habrás conseguido crear, configurar y ejecutar un proyecto Express.js usando ServBay. Ahora sabes cómo:
- Inicializar un proyecto con
express-generator
. - Ejecutar aplicaciones Express.js en puertos personalizados.
- Configurar el proxy inverso en la sección de sitios web de ServBay para acceder a tu app Node.js vía puertos HTTP/S estándar.
- Conectar tu aplicación a distintas bases de datos comunes dentro del entorno proporcionado por ServBay.
ServBay simplifica enormemente la configuración y gestión del entorno local para Node.js (Express.js), permitiéndote centrarte en el código. Además, sus funciones adicionales como certificados SSL automáticos, backup de sitios web, y monitoreo de logs, agilizan el flujo de trabajo de desarrollo local.