Logo

dev-resources.site

for different kinds of informations.

Servidor NodeJs + Typescript + ExpressJs

Published at
10/7/2024
Categories
webdev
node
typescript
backend
Author
Eduardo Fuentes
Categories
4 categories in total
webdev
open
node
open
typescript
open
backend
open
Servidor NodeJs + Typescript + ExpressJs

Express es un framework web minimalista popular para Node.js. Permite crear aplicaciones web de manera sencilla y r谩pida, tiene una documentaci贸n bastante completa que puedes revisar aqu铆.

En este tutorial, te explico c贸mo puedes crear t煤 primer servidor Express en TypeScript.

Paso 1: Configuraci贸n del entorno de desarrollo

Aseg煤rate de tener Node.js y npm instalados en t煤 m谩quina. Para instalar estas tecnolog铆as, puedes seguir los pasos de sus sitios oficiales.

Luego, debes dirigirte a la ubicaci贸n donde quieres guardar t煤 proyecto, y crear una carpeta con el nombre que prefieras. En mi caso utilizar茅 ts-server.

mkdir ts-server
cd ts-server

Para iniciar el proyecto node con configuraciones por defecto, debes utilizar el siguiente comando.

npm init -y

Para iniciar un repositorio git, debes utilizar el siguiente comando.

git init

Luego, debes crear un archivo .gitignore en la ra铆z del directorio, este archivo sirve, para ignorar ciertos directorios o archivos, que no son necesarios subir al repositorio remoto.

Al crear .gitignore, puedes entrar al siguiente link, donde para este caso, puedes sumar las siguientes restricciones.

Generador gitignore

Esto generar谩 el contenido necesario para el .gitignore, por lo que lo debes copiar y pegar en el archivo que creaste.

A continuaci贸n, debes agregar un archivo .editorconfig en la ra铆z del directorio, que su objetivo, es tener un estandar en el editor que utilices, as铆 si otros desarrolladores quieren aportar en el proyecto, estar谩 esta configuraci贸n centralizada.

root = true

[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true

[*.js]
quote_type = single

[*.md]
max_line_length = off
trim_trailing_whitespace = false

Tambi茅n es necesario configurar un linter, para seguir un est谩ndar de c贸digo, por lo que debes crear un .eslintrc.json en la ra铆z del directorio con una configuraci贸n similar a esta.

{
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "ecmaVersion": 2018,
    "sourceType": "module"
  },
  "extends": [
    "eslint:recommended",
    "plugin:@typescript-eslint/recommended",
    "prettier"
  ],
  "env": {
    "es6": true,
    "node": true,
    "jest": true
  },
  "plugins": ["@typescript-eslint"],
  "rules": {
    "no-console": "warn"
  }
}

Con esto, tienes la configuraci贸n principal de t煤 proyecto.

Paso 2: Instalaci贸n de dependencias

Para continuar con el proyecto, es necesario que instalemos las dependencias que necesitamos en nuestro proyecto.

Estas ser铆an las dependencias que se necesitan en un entorno de desarrollo, esto quiere decir que no son necesarias cuando el servidor est茅 en producci贸n.

  • @types/express --> Proporciona definiciones de tipo para el framework Express.
  • @typescript-eslint/eslint-plugin --> Un plugin de ESLint que contiene un conjunto de reglas espec铆ficas para TypeScript.
  • @typescript-eslint/parser --> Un parser que permite a ESLint entender TypeScript. Es necesario para que ESLint pueda analizar y aplicar reglas a los archivos TypeScript.
  • eslint --> Es una herramienta de an谩lisis de c贸digo est谩tico para identificar patrones problem谩ticos en el c贸digo JavaScript.
  • eslint-config-prettier --> Desactiva las reglas EsLint que son innevesarias.
  • eslint-plugin-prettier --> Integra Prettier con ESLint, permitiendo que Prettier formatee el c贸digo como parte del proceso de linting.
  • nodemon --> Es una herramienta que ayuda a desarrollar aplicaciones basadas en Node.js al reiniciar autom谩ticamente la aplicaci贸n cuando se detectan cambios en los archivos del directorio.
  • prettier --> Es un formateador de c贸digo que asegura que todo el c贸digo tenga un estilo consistente.
  • ts-node --> Permite ejecutar archivos TypeScript directamente en Node.js sin necesidad de compilarlos previamente a JavaScript.
  • typescript --> Es un superconjunto de JavaScript que a帽ade tipos est谩ticos opcionales

La dependencia necesaria para producci贸n, para este caso.

  • express --> Framework web minimalista

Para instalar estas dependencias, ocuparemos los siguientes comandos.

npm i express
npm i @types/express @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint eslint-config-prettier eslint-plugin-prettier nodemon prettier ts-node typescript -D

Paso 3: Archivos de configuraci贸n

  1. Para crear el archivo de configuraci贸n de typescript puedes utilizar el siguiente comando.
npx tsc --init

y debe contener algo as铆.

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "outDir": "./dist",
    "rootDir": "./src"
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist", "src/tests/**/*"]
}

  1. El package.json hay que modificarlo, para que utilice nodemon y cosas por el estilo, por lo que quedar铆a algo como esto.
{
  "name": "curso-platzi",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "nodemonConfig": {
    "watch": [
      "src"
    ],
    "ext": "ts",
    "ignore": [
      "*.test.ts"
    ],
    "execMap": {
      "ts": "ts-node"
    }
  },
  "scripts": {
    "dev": "nodemon src/index.ts",
    "start": "node dist/index.js",
    "lint": "eslint src --ext .ts"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@types/express": "^5.0.0",
    "@typescript-eslint/eslint-plugin": "^8.8.0",
    "@typescript-eslint/parser": "^8.8.0",
    "eslint": "^9.12.0",
    "eslint-config-prettier": "^9.1.0",
    "eslint-plugin-prettier": "^5.2.1",
    "nodemon": "^3.1.7",
    "prettier": "^3.3.3",
    "ts-node": "^10.9.2",
    "typescript": "^5.6.2"
  },
  "dependencies": {
    "express": "^4.21.0"
  }
}

Paso 4: Levantar servidor

Finalmente en el directorio src/ agregamos el archivo index.ts, donde podremos levantar el servidor que necesitamos de la siguiente manera.

import express, { NextFunction, Request, Response } from "express";
// Se define lo necesario para el servidor
const app = express();
const port = 3000;
// Se define un middleware, para que se puedan manejar peticiones y respuestas en formato json
app.use(express.json());
// Se define el endpoint raiz, para obtener un recurso
app.get("/", (req: Request, res: Response) => {
  res.send({ message: "Hello World" });
});

//Manejo de errores
app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
  res.status(500).send("Algo sali贸 mal");
});

// Se levanta el servidor y escucha en el puerto 3000
app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});

La estructura del c贸digo queda de esta forma.

Estructura c贸digo

Conclusi贸n

Y eso es gente, espero que haya sido un buen punto de partida para aprender a crear servidores web con Express, TypeScript y Node.

Chau!

Featured ones: