使用 post api 时出现产品验证失败错误

问题描述 投票:0回答:1

我已经在 node express 中创建了帖子并获得了产品请求。获取请求 API 工作正常但通过错误发布请求:

models.js 文件

const mongoose=require("mongoose")

const produdctSchema=new  mongoose.Schema({
    name: {
        type: String,
        required:true,
        trim: true,
      },
    description:{
        type:String,
        required:[true, "please enter product description"]
    },
    price:{
        type:Number,
        required:[true, "please enter product price"]
    },
    rating:{
        type:Number,
        default:0
    },

    category:{
       type:String,
        required:true
    },
    stock:{
        type:Number,
        requird:true,
        default:1
    },
    numOfReview:{
        type:Number,
        default:0,

    },
   
   createdAt:{
     type:Date,
     default:Date.now()
 }
})

module.exports=mongoose.model("product",produdctSchema)

routes.js 文件

const express = require("express");
const {allproductController,createProductController}=require("../controllers/productControllers.js")

const router=express.Router();

router.route("/product/new").post(createProductController);
router.route("/products").get(allproductController)

module.exports= router

controllers.js 文件

const Product= require("../models/productModel.js")

exports.createProductController=async (req,res,next)=>{
    try {
   
        const product = await Product.create(req.body);
        res.status(201).json({
            success:true,
            product
        })
    } catch (error) {
        res.status(500).json({
            success:false,
            message:error.message
        })
    }
};

exports.allproductController=async(req,res)=>{
    try {
        const products=await Product.find();
        res.status(200).json({message:"success",data:products})
    } catch (error) {
        res.status(500).json({message:"error"})
    }

}

get API 正在运行,但是当 post API 通过 post man 中的捕获错误调用它时
“产品验证失败:类别:路径

category
为必填项,价格:请输入产品价格,描述:请输入产品描述,名称:路径
name
为必填项。” }

node.js express
1个回答
0
投票

我建议您将 req.body 对象解构为各自的字段;

const {name, description, price, rating, category, stock, numOfReviews } = 
req.body;

try {
    const product = await Product.create({
          name,              
          description,       
          price,             
          rating,            
          category,
          stock,
          numOfReviews
    });
    res.status(200).json({
        success:true,
        product
    })
} catch (error) {
    res.status(500).json({
        success:false,
        message:error.message
    })
}

根据您的架构定义,您将

name, description, price, caterogy, stock
字段定义为 required 及其各自的错误消息,这意味着当您调用 .create() 创建新产品时,这些
fields 不能为空
否则它会触发验证错误。

© www.soinside.com 2019 - 2024. All rights reserved.