Rest Api en Node.js con Typescript

Typescript es un superset de JavaScript que tiene como finalidad desarrollar aplicaciones grandes con facilidad de mantenimiento.

Primero vamos a explicar unos conceptos de Typescript para comprender el funcionamiento del mismo.
Tipado estático: En typescript las variables tienen un tipo de dato y los valores sólo se pueden asignar a variables del tipo correspondiente. En base a esto se desglozan otras caractetristicas: Interfaces, Genéricos, Casting de datos (conversión de tipos), Argumentos con tipo, Tipo de retorno para las funciones y otros.
Cuando comparamos Typescript con Javascript nos damos cuenta también que en la primera se tiende a escribir código verboso pero además, por su naturaleza ofrece beneficios como: Autocompletado de código, Recomendación de qué argumentos recibe una función, Recomendación de qué tipo retorna una función, Auto documentación del código, Mejor análisis para detectar errores.
Typescript nos ayuda a detectar errores al escribir el código y no cuando lo lanzamos para testear a nivel de usuario.
Ahora si, vamos al proyecto. Primero que nada, debemos verificar si tenemos instalado Typescript en nuestra máquina, en caso de que no, podemos ejecutar (si estás en linux) npm install -g typescript
Luego, ejecutamos en la raiz de nuestro proyecto: npm i (para crear nuestro package.json) y tsc --init (para crear nuestro archivo de configuración para typescript - tsconfig.json). En el package json podemos implementar un par de procesos que nos van ayudar con el desarrollo, primero tsc -w para ejecutar typescript y detectar errores y segundo nodemon para levantar el servidor y que quede escuchando por cambios. En tsconfig.json podemos indicar que vamos usar ES6 en nuestro proyecto y que los archivos js de salida vayan a una carpeta llamada build. Recordemos que typescript convierte en javascript el resultado de lo que escribamos correctamente y este js es el que se va ejecutar.
packagejson
tsconfigjson
Luego podemos configurar nuestro servidor, importamos los módulos que necesitamos y creamos una clase. En el constructor de la misma ejecutamos express, las configuraciones iniciales y los endpoints que va exponer el API. Debemos tener en cuenta el tipado de datos, es por ello que la variable app se declara con su tipo en la linea 12. Luego de la clase, al final del archivo instanciamos la misma y ejecutamos el método start.
server1
server2
Vamos a configurar nuestras rutas: En este caso tenemos dos módulos: indexRouter y PostsRouter, en PostsRouter aplicaremos lo siguiente: llamamos al middleware auth que nos va permitir indicarle a un endpoint en específico si estará protegido por jwt, y también llamamos al modelo que corresponde con el proceso. (estamos implementando mongoDB con mongoose como interfaz) Creamos nuestra clase, definimos los tipos de datos con su valor y creamos nuestros métodos. Al final, instanciamos la clase y exportamos a router que es el tipo de dato Router y que le da vida a los endpoints. Cada endpoint llama al método indicado. Si el endpoint está protegido debe llevar dentro de sus parámetros al arreglo auth que fué exportado desde el middleware.
posts1
posts2
Luego de esto podemos configurar nuestro middleware con jwt, exportamos una constante que recibe Request, Response y NextFunction como parámetros y ejecuta el proceso de autenticación. Si es correcto permite acceder a los datos, si no, lanza una respuesta con el mensaje indicado.
jwt1
Por último definimos nuestro modelo:
model1
Para finalizar probamos el API con POSTMAN:
postman1
postman2
postman3
Pueden clonar el proyecto AQUÍ
Espero que les sirva, saludos!
#Javascript
#Typescript
#Node.js
#Express.js
#JWT
Comentarios: Pronto!