Interstellar Code

Inicializar un servidor Express

Aprende a configurar un servidor Express utilizando JavaScript.

01 de septiembre de 2025

Tabla de contenido:

  1. 1. Inicializar un servidor Express
  2. 2. Paso 1: Inicializar el proyecto
  3. 3. Paso 2: Instalar Librerías Necesarias
  4. 4. Estructura de Carpetas
  5. 5. Definición de archivos principales
  6. 6. Ejemplo de Código

Inicializar un servidor Express

Express es un framework minimalista para Node.js que facilita la creación de aplicaciones web y APIs. En este artículo vamos a ver como se puede inicializar un servidor de Express desde cero utilizando JavaScript. Antes de comenzar es importante tener una carpeta con el proyecto donde vamos a trabajar, y además tener Node.js instalado en el sistema, una vez que cumplimos con estos requisitos podemos proceder a inicializar el proyecto.


Paso 1: Inicializar el proyecto

Primero, abrimos una terminal y navegamos a la carpeta del proyecto. Luego, ejecutamos el siguiente comando para inicializar un nuevo proyecto de Node.js:

npm init -y

Este comando crea un archivo package.json con la configuración predeterminada. Además de tener en cuenta que el proyecto por defecto estará configurado para trabajar con CommonJS, si queremos trabajar con ES Modules debemos agregar el siguiente campo en el package.json:

"type": "module"

Paso 2: Instalar Librerías Necesarias

Las principales librerías que nos van a ayudar a crear un servidor de Express con funcionalidades básicas como manejo de rutas HTTP, conexión a base de datos como MongoDB, manejo de variables de entorno son, conexión con Websockets, entre algunas otras son:


Estructura de Carpetas

Una estructura de carpetas recomendada para un proyecto de Express utilizando una arquitectura MVC podría ser la siguiente:

my-express-app/
├── node_modules/
├── src/
│   ├── controllers/
│   ├── models/
│   ├── routes/
│   ├── middlewares/
│   ├── config/
│   ├── utils/
│   ├── app.js
│   └── server.js
├── .env
├── .gitignore
├── package.json
└── README.md

Definición de archivos principales


Ejemplo de Código

A continuación, se muestra un ejemplo básico de cómo podrían verse los archivos app.js y server.js:

src/app.js

import Server from './server.js';
import dotenv from 'dotenv';
dotenv.config();

const server = new Server();
server.listen();

src/server.js

import { createServer } from 'node:http';
import express from 'express';
import cors from 'cors';
import morgan from 'morgan';
import fileUpload from 'express-fileupload';
import { Server as SocketIOServer } from 'socket.io';
import { dbConnection } from './config/db.js';
import userRoutes from './routes/userRoutes.js';
import authRoutes from './routes/authRoutes.js';
import { socketController } from './sockets/socketController.js';

export class Server {
  constructor() {
    this.app = express();
    this.port = process.env.PORT || 3000;
    this.server = createServer(this.app);
    this.io = new SocketIOServer(this.server, {
      cors: {
        origin: '*',
      },
    });

    // Conectar a la base de datos
    dbConnection();

    // Middlewares
    this.middlewares();

    // Rutas de la aplicación
    this.routes();

    // Configuración de sockets
    this.sockets();
  }

  middlewares() {
    // Habilitar CORS
    this.app.use(cors());

    // Parseo y lectura del body
    this.app.use(express.json());

    // Middleware para logging
    this.app.use(morgan('dev'));

    // Middleware para manejo de archivos
    this.app.use(
      fileUpload({
        useTempFiles: true,
        tempFileDir: '/tmp/',
        createParentPath: true,
      })
    );

    // Directorio público
    this.app.use(express.static('public'));
  }

  routes() {
    this.app.use('/api/users', userRoutes);
    this.app.use('/api/auth', authRoutes);
  }

  sockets() {
    this.io.on('connection', (socket) => socketController(socket, this.io));
  }

  listen() {
    this.server.listen(this.port, () => {
      console.log(`Servidor corriendo en http://localhost:${this.port}`);
    });
  }
}

Este código configura un servidor Express con middlewares comunes, rutas para usuarios y autenticación, y soporte para WebSockets utilizando Socket.IO. Además, se conecta a una base de datos MongoDB utilizando Mongoose.