No se puede agregar nuevo producto a mongodb, se ha presentado un error POST 500.
Tengo problemas para agregar un nuevo producto a MongoDB. He realizado el registro y funciona bien, al igual que el inicio de sesión. Pero al agregar un producto, recibí este mensaje:
POST http://localhost:5000/api/product/newProduct 500 (Error interno del servidor)
Revisé mi punto final y creo que está bien.
dashboard.jsx
import axios from ‘axios’
import React, { useEffect, useState } from ‘react’
import { useNavigate } from ‘react-router’
function Dashboard() {
const [name, setName] = useState(“”)
const [categories, setCat] = useState(“”)
const [error, seterror] = useState(false)
const [data, setData] = useState({})
const navigate = useNavigate()
const [price, setprice] = useState(0)
const handleCat = (e) => {
setCat(e.target.value.split(‘,’))
}
const handleSubmit = async (e) => {
e.preventDefault()
console.log(categories,name,price)
seterror(false)
try {
const prod = await axios.post(‘http://localhost:5000/api/product/newProduct’, {
name,
categories,
price
})
prod.data && navigate(‘/dashboard’)
} catch (error) {
seterror(true)
}
}
useEffect(() =>{
const getProduct = async () =>{
try {
const res = await axios.get(‘http://localhost:5000/api/product’)
setData(res.data)
} catch (error) {
}
}
getProduct()
},[])
//console.log(data)
return (
)
}
export default Dashboard
index.js
const express = require(‘express’)
const mongoose = require(‘mongoose’)
const app = express()
const cors = require(‘cors’)
const dotenv = require(‘dotenv’)
const userRoute = require(‘./routes/auth’)
const productRoute = require(‘./routes/product’)
dotenv.config()
app.use(cors())
app.use(express.json())
mongoose
.connect(process.env.MONGO_DB)
.then(() => {
console.log(‘Conectado al servidor’)
})
.catch((err) => console.log(err))
app.use(‘/api/auth’, userRoute)
app.use(‘/api/product’, productRoute)
app.listen(5000, () => {
console.log(‘Local Host está ejecutándose en el puerto 5000’)
})
productRoute.js
const router = require(‘express’).Router()
const Product = require(‘../models/Product’)
router.post(‘/newProduct’, async (req, res) => {
const newProduct = new Product(req.body)
try {
const savedProduct = await newProduct.save()
res.status(200).json(savedProduct)
} catch (error) {
res.status(500).json(error)
}
})
router.get(‘/’, async (req, res) => {
try {
const products = await Product.find()
res.status(200).json(products)
} catch (error) {
res.status(500).json(error)
}
})
module.exports = router
schema
const mongoose = require(‘mongoose’)
const ProductSchema = new mongoose.Schema(
{
name: { type: String, required: true, unique: true },
price: { type: Number, required: true },
categories: { type: Array },
img: { type: String },
},
{ timestamps: true }
)
module.exports = mongoose.model(‘Product’, ProductSchema)
davy.ai
Parece que puede haber un problema con los datos que se envían desde el frontend al backend.
Aquí hay algunas cosas para verificar y solucionar el problema:
Product
coincide con el esquema de la base de datos. Asegúrese de que todos los campos requeridos estén presentes y coincidan con los tipos.Verifique la carga útil de solicitud que se envía al backend. Puede hacer esto agregando una declaración de
console.log(req.body)
en el archivoproductRoute.js
, dentro de la funciónrouter.post('/newProduct', async (req, res) => { ... })
. Asegúrese de que los datos se estén enviando en el formato correcto y coincidan con el esquema.Verifique si hay errores de sintaxis o errores tipográficos en el código, especialmente en la función
handleSubmit
endashboard.jsx
.Use una herramienta como Postman para enviar una solicitud de prueba al backend y ver si recibe la respuesta esperada. Esto puede ayudar a confirmar si el problema está en el código del frontend o en el código del backend.
Si ninguna de estas soluciones corrige el problema, puede ser útil proporcionar más contexto, como todo el mensaje de error que se está recibiendo.