Bienvenido, les saluda Luis y esta vez les traigo este nuevo artículo.
He sido desarrollador de frontend durante casi 6 años y en este tiempo me di cuenta de que tener una imagen clara tanto del backend como de los lados de un proyecto ayudaría a tener una comprensión holística del mismo. Hace varios meses decidí adquirir algunas habilidades de back-end, principalmente porque quería convertirme en un desarrollador más independiente y tener una mejor comprensión de la lógica empresarial de cualquier proyecto en el que pudiera estar trabajando.
Comencé con un curso sobre frontendmasters, impartido por Scott Moss, en el que explica exactamente cómo crear una API simple y comprobable con Express, un marco Node.js y algunas de las mejores prácticas para ello, junto con tecnologías específicas, como jwt y Mongo.
Explicaré algunos de los pasos iniciales y profundizaré en cosas que también eran nuevas para mí.
Para crear una aplicación Node, crearemos una nueva carpeta y en la terminal ejecutaremos npm init
para esa carpeta y configúrelo siguiendo los pasos iniciales.
Después de seguir esos pasos, cree un nuevo archivo llamado index.js
en el que escribiremos nuestro código. Todo lo que necesita para iniciar una aplicación simple con Express es:
Supuestamente querríamos crear una API que nos permita realizar todas las operaciones CRUD en algunos productos en una base de datos, como una tienda en línea.
Desde un punto de vista arquitectónico, podemos dividirlo en tres categorías principales o tipos de recursos:
- Modelos: la forma que tiene una entidad en nuestra base de datos
- Controladores: aquí definimos diferentes acciones que se pueden realizar en las entidades de nuestra base de datos
- Enrutadores: asociar cada ruta con el controlador adecuado
Base de datos
Para la base de datos, usé MongoDB junto con mongoose, porque es muy fácil de integrar con Node.
Si es la primera vez que escucha esto, solo necesita saber que MongoDB es una base de datos NoSQL sin esquema, lo que significa que puede almacenar entidades JSON en ella, y la estructura de estas entidades puede variar ya que no se aplica como SQL. bases de datos.
Más simplemente, si los datos SQL se vean como tablas con identificadores y relaciones definidas entre ellos, en NoSQL se vería así:
Debido a que MongoDB no impone una estructura para los datos, usamos mongoose, que proporciona un ‘esquema’, que es una estructura o forma de datos. Para mayor referencia, puede leer este artículo, o simplemente lea la documentación de mangosta.
Para conectar nuestra aplicación a la base de datos,
En nuestro caso, creé una nueva carpeta src/resources/product
y agregó 3 archivos en ella.
Para saber qué hace cada archivo, se agregó una explicación dentro del nombre del archivo (controladores, modelo, enrutador).
El esquema para el producto se creó de la siguiente manera:
import mongoose from 'mongoose' const productSchema = new mongoose.Schema( { name: { type: String, required: true, trim: true, maxlength: 50, text: true }, description: { type: String, required: true, trim: true, maxlength: 100 }, quantity: { type: Number, required: true, trim: true, maxlength: 3 }, price: { type: Number, required: true, trim: true, maxlength: 3 }, }, { timestamps: true } ) productSchema.index({ category: 1, name: 1 }, { unique: true }) export const Product = mongoose.model('product', productSchema)
Modelo del Producto
Los timestamps
La opción le dice a la mangosta que asigne createdAt
y updatedAt
campos a su esquema.
Controladores
Bien, ahora que hemos definido cómo queremos que se vea un producto, podemos continuar e implementar las acciones CRUD para la API.
Algo bastante útil que aprendí del curso fue crear un archivo genérico con estas funciones CRUD que se puede usar en cualquier modelo que tengamos en nuestra app y básicamente, como puedes ver arriba, cada función recibe una model
parámetro y devuelve una nueva función asincrónica que recibe la solicitud del cliente y el objeto de respuesta que se enviará al cliente como parámetros.
Así es como podemos usar el archivo anterior, en nuestro archivo product.controllers.js
:
import crudControllers from './crud'import Product from './product.model'export default crudControllers(Product)
Puedes ver aquí que exportamos crudControllers(Product)
, lo que significa que exportamos las funciones devueltas de cada función desde el archivo crud.js
.
Enrutadores
Como ya sabemos, cada controlador debe estar vinculado a una ruta, que el cliente puede utilizar para solicitar datos.
Express tiene su propio componente de enrutador que podemos usar para esto.
Router.js
Pero aún no hemos terminado, todavía tenemos que conectarnos a la base de datos y decirle a nuestra aplicación que use el enrutador del producto en /product
url.
Entonces, en nuestro index.js necesitamos conectarnos a la base de datos y vincular nuestras rutas a nuestros controladores.
Si se está preguntando qué es el paquete morgan, de acuerdo con la definición de npm, es un middleware de registro de solicitudes HTTP para node.js, lo que significa que si los registros de nuestra terminal se verán más bonitos con esto, serán de color verde en caso de éxito y rojo en error.
Esta es solo una pieza que muestra cómo crear una pequeña API funcional.
En el próximo artículo veremos cómo proteger nuestra API, crearemos más puntos finales, agregaremos un módulo de autenticación y también veremos cómo usar tokens jwt para asegurar nuestra aplicación.
Gracias por leer.
Añadir comentario