El problema es que cuando realizo la solicitud de venta usando cartero, hay un error en mi terminal vscode que dice:
dejar producto = esperar Producto.findById(req.params.id);
^ TypeError: no se puede leer la propiedad 'id' de indefinido.
Hago esta solicitud en cartero http://localhost:4500/api/v1/product/61dfc2ba3eb817d287929a7a (61dfc2ba3eb817d287929a7a es la identificación) con cuerpo como json sin procesar. req.params.id está llegando a ser indefinido ..
Parecía un error en el análisis, así que le agregué body-parser y cors, pero aparece el mismo error.
Código:
const express = require("express"); const mongoose = require("mongoose"); const bodyParser = require("body-parser"); const cors = require("cors"); const app = express(); mongoose .connect("mongodb://localhost:27017/sampl", { useNewUrlParser: true, useUnifiedTopology: true, }) .then(() => { console.log("db connected"); }) .catch((err) => { console.log(err); }); app.use(express.json()); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.use(cors()); const productSchema = new mongoose.Schema({ name: String, description: String, price: Number, }); const Product = new mongoose.model("Product", productSchema); //create product app.post("/api/v1/product/new", async (req, res) => { const product = await Product.create(req.body); console.log(req.body); res.status(200).json({ success: true, product, }); }); //read product app.get("/api/v1/products", async (req, res) => { const products = await Product.find(); res.status(200).json({ success: true, products, }); }); //update product app.put("/api/v1/product/:id", async (res, req) => { let product = await Product.findById(req.params.id); product = await Product.findByIdAndUpdate(req.params.id, req.body, { new: true, useFindAndModify: false, runValidators: true, }); res.status(200).json({ success: true, product, }); }); app.listen(4500, () => { console.log("server is working"); });El objeto req representa la solicitud HTTP y tiene propiedades para la cadena de consulta de la solicitud, los parámetros, el cuerpo y los encabezados HTTP. El objeto res representa la respuesta HTTP que envía una aplicación Express cuando recibe una solicitud HTTP.
Entonces, primero queremos pasar el objeto req y luego res .
cambia esto
app.put("/api/v1/product/:id", async (res, req) => { let product = await Product.findById(req.params.id);a
app.put("/api/v1/product/:id", async (req, res) => { let product = await Product.findById(req.params.id);