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.













