Search code examples
javascriptnode.jsmongodbrequest

Put requests using node.js and mongodb


I'm learning how to make requests using node.js. My problem is that it generates these errors when making the requests (Cannot GET /Citaup/654fe24584f7a3d27e0a4c61) Failed to load resource: the server responded with a status of 404 (Not Found) Registro.js:146 Error: Error al actualizar la cita: Not Found modificarCita @ Registro.js:146, I have this request structured as follows:

The driver that performs the update is the following:

const Cita = require('../Models/Cita');

exports.actualizarCita = async (req, res) => {
  try {
    console.log('Datos recibidos en req.body:', req.body);
    const { id } = req.params;
    const { nuevaFecha, nuevaHora, nuevoRut, nuevoExamen, nuevoMotivo, nuevoIdMedico, nuevoEquipo, nuevoRutm } = req.body;

    // Combinar fecha y hora
    const nuevaFechaHora = new Date(`${nuevaFecha}T${nuevaHora}`);
    
    const camposActualizados = {
      fecha: nuevaFechaHora,
      rutp: nuevoRut,
      idex: nuevoExamen,
      motivo: nuevoMotivo,
      idmedico: nuevoIdMedico,
      equipo: nuevoEquipo,
      rutm: nuevoRutm,
    };

    // Encuentra y actualiza la cita, y devuelve la versión actualizada
    const citaActualizada = await Cita.findOneAndUpdate(
      { _id: id },
      camposActualizados,
      { new: true }
    );

    console.log('Cita encontrada y actualizada:', citaActualizada);

    if (!citaActualizada) {
      return res.status(404).json({ error: 'Cita no encontrada' });
    }

    res.json(citaActualizada);
  } catch (error) {
    console.error('Error al actualizar la cita:', error);
    res.status(500).json({ error: 'Error al actualizar la cita' });
  }
};

The model is the following:

const mongoose = require('mongoose');

const cita = new mongoose.Schema({
    rutp: {
        type: String,
        required: true
    },
    idmedico: {
        type: String,
        required: true
    },
    idex: {
        type: Number,
        required: true
    },
    motivo: {
        type: String,
        required: true
    },
    fecha: {
        type: Date,
        required: true
    },
    equipo: {
        type: Number,
        required: true
    },
    rutm: {
        type: String,
        required: true 
    }
});

const Cita = mongoose.model('Cita', cita);

module.exports = Cita;

The routes file is as follows:

const express = require('express');
const router = express.Router();
const citaup = require('../Controllers/citaupdate');

// Ruta para crear una nueva persona
router.put('/:id', citaup.actualizarCita);

module.exports = router;

While the server file that uses said path is the following:

const express = require("express");
const bodyParser = require('body-parser');
const cors = require("cors");
const morgan = require("morgan");

const db = require("./Database");

const app = express();

app.set("port", process.env.PORT || 5000);

// Rutas
const p = require('./Routes/NuevaPersona');
const veru = require('./Routes/veruser');
const nusuario = require('./Routes/NuevoUsuario');
const citaf = require('./Routes/citafind');
const citau = require('./Routes/citaup');
const citac = require('./Routes/citacreate');

app.use((req, res, next) => {
    console.log('Solicitud recibida:', req.method, req.url);
    console.log('Cuerpo de la solicitud:', req.body);
    next();
  });

// Middlewares
app.use(bodyParser.json());
app.use(morgan("dev"));
app.use(cors());

app.use('/NPersona', p);
app.use('/Veruser', veru);
app.use('/NUsuario', nusuario);
app.use('/Citaf', citaf);
app.use('/Citac', citac);

// Actualiza tu ruta para incluir un parámetro ":id"
app.put('/Citaup/:id', citau);

db();

app.listen(app.get("port"), () => {
    console.log(`Servidor está corriendo en el puerto: ${app.get("port")}`);
});

module.exports = app;

Finally, the front that makes the request is the following:

const modificarCita = async (id, nuevaFecha, nuevaHora, nuevoRut, nuevoExamen, nuevoMotivo, nuevoIdMedico, nuevoEquipo, rut) => {
  try {
      const nuevaFechaHora = new Date(`${nuevaFecha}T${nuevaHora}`);
      
      const url = `http://localhost:5000/Citaup/${id}`;  // Agregar el id a la URL
      
      const response = await fetch(url, {
          method: 'PUT',
          headers: {
              'Content-Type': 'application/json',
          },
          body: JSON.stringify({
              fecha: nuevaFechaHora,
              nuevoRut: nuevoRut,
              nuevoExamen: nuevoExamen,
              nuevoMotivo: nuevoMotivo,
              nuevoIdMedico: nuevoIdMedico,
              nuevoEquipo: nuevoEquipo,
              nuevoRutm: rut,
          }),
      });
      
      if (!response.ok) {
        throw new Error(`Error al actualizar la cita: ${response.statusText}`);
      }
      
      const citaActualizada = await response.json();
      console.log('Cita actualizada:', citaActualizada);
      alert("Modificación realizada exitosamente.");
  } catch (error) {
      console.error('Error:', error.message);
  }
};

I would like to see if someone could help me, since I am new to doing this. Thank you in advance.


Solution

  • The problem has already been resolved, it was an error that was generated when using the dates and converting them.