我已经在 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
为必填项。”
}
我建议您将 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 不能为空否则它会触发验证错误。