CRUD en NodeJS: Rutas y Acciones en el controlador (API RESTful)

Hoy aprenderemos a trabajar más con rutas y acciones del controlador y vamos a hacer un CRUD en NodeJS para nuestro servicio RESTful.

Lo primero que tenemos que hacer en nuestro controlador es importar el modelo de Nota:

var Nota = require('../models/nota');

Guardar en la base de datos

El primer método que crearemos nos servirá para guardar nuevos documentos de tipo Nota en nuestra base de datos de Mongo usando mongoose desde NodeJS.

function saveNota(req, res){

        // Creamos el objeto Nota
	var nota = new Nota();

        // Recogemos los datos que nos llegan por POST
	var params = req.body;

        // Comprobamos que nos llega el nombre
	if(params.nombre){
                
                // Asignamos un valor a las propiedades del objeto Nota
		nota.nombre = params.nombre;
		nota.descripcion = params.descripcion;

                // Guardamos el documento en la base de datos
		nota.save((err, notaStored) => {

                        // Si se produce un error lo devolvemos
			if(err) return res.status(500).send({message: 'Error en el servidor'});
			
                        // En el caso de que el documento se guarde tambien devolvemos el objeto guardado
			if(notaStored){
					return res.status(200).send({
						nota: notaStored
					});
			}else{
					return res.status(200).send({
						message: 'No se ha guardado la nota'
					});
			}
			
		});
	}else{
		return res.status(200).send({
				message: 'El nombre de la fruta es obligatorio'
			});
	}
}

Listar todo

El segundo método que crearemos será el que nos devuelva una colección de objetos completa con todos los documentos que tenemos en nuestra colección de notas de la base datos.

function getNotas(req, res){

        // Usamos el método find sobre nuesta entidad Nota y ordenamos los resultados
	Nota.find({}).sort({'_id':-1}).exec((err, notas) => {
		if(err) return res.status(500).send({message: 'Error en el servidor'});
		
                     // Devolvemos el resultado de la query en json
			if(notas){
				return res.status(200).send({
					notas
				});
			}else{
				return res.status(404).send({
					message: 'No hay notas'
				});
			}
		
	});
}

Devolver un documento

Ahora crearemos un método para nuestro CRUD en NodeJS que nos devuelva una sola nota.

function getNota(req, res){
        // Recogemos un parametro por la url
	var notaId = req.params.id;

        // Buscamos por ID
	Nota.findById(notaId).exec((err, nota) => {
		if(err) return res.status(500).send({ message: 'Error en el servidor' });
                       
                        // Devolvemos el resultado
			if(nota){
				return res.status(200).send({
					nota
				});
			}else{
				return res.status(404).send({
					message: 'No existe la nota'
				});
			}
		
	});
}

Actualizar

Una de las funcionalidades importantes en un CRUD es la actualización de los datos de un objeto concreto. Vamos a crear un método que nos permita hacer un update de los documentos de nuestra database.

function updateNota(req, res){
        // Recogemos un parámetro por la url
	var notaId = req.params.id;

        // Recogemos los datos que nos llegen en el body de la petición
	var update = req.body;

        // Buscamos por id y actualizamos el objeto y devolvemos el objeto actualizado
	Nota.findByIdAndUpdate(notaId, update, {new:true}, (err, notaUpdated) => {
		if(err) return res.status(500).send({message: 'Error en el servidor'});
		
			if(notaUpdated){
				return res.status(200).send({
					nota: notaUpdated
				});
			}else{
				return res.status(404).send({
					message: 'No existe la nota'
				});
			}
		
	});
}

Eliminar

Por último crearemos una función para poder borrar documentos de nuestra colección de Notas.

function deleteNota(req, res){
	var notaId = req.params.id;

        // Buscamos por ID, eliminamos el objeto y devolvemos el objeto borrado en un JSON
	Nota.findByIdAndRemove(notaId, (err, notaRemoved) => {
		if(err) return res.status(500).send({ message: 'Error en el servidor' });
		
			if(frutaRemoved){
				return return res.status(200).send({
					nota: notaRemoved
				});
			}else{
				return return res.status(404).send({
					message: 'No existe la nota'
				});
			}
		
	});
}

Exportar métodos

Para poder utilizar todas estas funciones fuera de este controlador tenemos que exportalas de la siguiente manera:

module.exports = {
	pruebas,
	saveNota,
	getNotas,
	getNota,
	updateNota,
	deleteNota
};

Crear rutas en NodeJS

Por último debemos crear una ruta por cada método. Nuestro fichero de rutas quedaría así:

'use strict'

var express = require('express');
var NotaController = require('../controllers/nota');

var api = express.Router();

api.get('/pruebas', NotaController.pruebas);

// POST para guardar nuevos documentos
api.post('/nota', NotaController.saveNota);

// GET para conseguir documentos
api.get('/notas', NotaController.getNotas);
api.get('/nota/:id', NotaController.getNota);

// PUT para actualizar documentos
api.put('/nota/:id', NotaController.updateNota);

// DELETE para eliminar documentos
api.delete('/nota/:id', NotaController.deleteNota);

module.exports = api;

Ya podemos utilizar todas estas URLs y probarlas con POSTMAN.

Con esto ya sabemos hacer un CRUD en NodeJS y tenemos hecha una pequeña API RESTful totalmente funcional.

Víctor Robles WEB

Autor: Victor

Desarrollador web - Formador online - Blogger

Compartir este post