Estructura de una API Rest con NodeJS, Express y MongoDB

William Bastidas
Feb 19, 2018 · 6 min read
Image for post
Image for post

En este artículo encontrarán algunas anotaciones y la forma en la que organizo la estructura de mi API Rest con nodejs, express y mongoDB.

Pasos que he realizado:

  1. Instalar MongoDB.
  2. Crear una base de datos con MongoDB.
  3. Instalar las dependencias (Fichero de configuración principal package.json).
  4. Hacer la conexión a MongoDB desde NodeJS con Mongoose. (en el index.js).
  5. Crear el servidor web con NodeJS. API RESTful en Node.js (en el app.js).
  6. Cargar el fichero app.js con la configuración de Express (en el index.js).
  7. Crear los esquemas y modelos.
  8. Crear un controlador.
  9. Crear la ruta para el controlador.
  10. Importar y cargar las rutas en el servidor (app.js).
  11. Testear mi api con Potman.

Algunos conceptos y dependencias básicas

NodeJS: Es una plataforma o entorno de ejecucion para desarrollar con javascript del lado del servidor.

ExpressJS: Es un framework sobre nodejs que nos permite trabajar con el protocolo http y tener sistemas de rutas.

MongoDB: Es una base de datos NoSQL que nos permite trabajar con documentos json binarios (bson), en lugar de utilizar el sistema clasico de tablas y relaciones, lo que hace que se muy veloz. Tiene colecciones de documentos y estos documentos son objetos json (bson) y los datos se almacenan de manera binaria para aumentar le rendimiento.

Nodemon: Utilidad para monitorear y reiniciar el servidor automaticamente ante cualquier cambio.

body-parser: Nos permite convertir los datos que nos llegan en las peticiones al servidor en objetos JSON.

Bcrypt-nodejs: Librería para encriptar contraseñas con el metodo bcrypt.

Connect-multiparty: Librería para subir ficheros.

Mongoose: Es un modulo y una especie de ORM que nos provee metodos y funcionalidades para trabajar mejor con mongoDB.

Jwt-simple: Librería para la gestión de tokens (nos permite realizar autenticación y cifrado de tokens).

Moment: Librería para trabajar con fechar.

Moongose-pagination: Librería para hacer paginados.

Middlewares: Es un bloque de código que se ejecuta entre la petición que hace el usuario (request) hasta que la petición llega al servidor.

Modelos: Representan una entidad de nuestra base de datos, más concretamente un único registro o documento. Son una abstracción que vamos a utilizar para realizar operaciones en la base de datos. (Están definidos por un esquema).

Esquemas: Son la estructura de una colección, con estructura me refiero a los atributos de cada colección que se vaya a crear.

Estructura del proyecto

Image for post
Image for post

La estructura inicial del proyecto contiene en la raíz un archivo package.json donde vamos a especificar la información de nuestro paquete con sus dependencias, un archivo index.js para la conexión a la base de datos y configuración general de mongoose, un app.js para crear el servidor web con NodeJS y la configuración de express, un directorio para nuestros middlewares, un directorio de models para crear los modelos y esquemas, un directorio de controllers para crear las acciones y operaciones sobre nuestra base de datos, y finalmente, un directorio de rutas el que definimos las rutas a las que responderá nuestra aplicación.

package.json

Es el archivo de configuración principal del proyecto y debe encontrarse en la raíz del mismo. En el debe estar reflejado el nombre del proyecto, versión, descripción, scripts, autor, tipo de licencia y algo muy importante las dependencias.

index.js

Es el archivo para conectar NodeJS con MongoDB (en el hacemos la conexión a la base de datos y configuración general de mongoose)

app.js

Es el archivo para crear el servidor web con NodeJS, contiene la configuración de express. En el también importamos y cargamos las rutas después de crearlas.

models/user.js

archivo para crear los esquema y modelo User.

middlewares/authenticated.js

Archivo con el middleware para validar la autenticacion del usuario.

controller/user.js

Archivo controlador de ejemplo. En el programamos las acciones y operaciones sobre nuestra base de datos, en este caso para obtener los datos de un usuario.

routes/user.js

Archivo en el que definimos las rutas (path) a las que responderá nuestra aplicación y en ellas se encontrará la lógica a ejecutar.

WilliamBastidasBlog

Mi cuardeno de anotaciones, donde intento compartir…

William Bastidas

Written by

Developer | Web | Mobile | Ionic | TypeScript | JavaScript | Angular | UI | UX | Git | Html | CSS | Agile | Frontend | PWA.

WilliamBastidasBlog

Mi cuardeno de anotaciones, donde intento compartir experiencias de desarrollo, experimentos e interactuar con la comunidad.

William Bastidas

Written by

Developer | Web | Mobile | Ionic | TypeScript | JavaScript | Angular | UI | UX | Git | Html | CSS | Agile | Frontend | PWA.

WilliamBastidasBlog

Mi cuardeno de anotaciones, donde intento compartir experiencias de desarrollo, experimentos e interactuar con la comunidad.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store