**I'm trying to save a new document in mongodb with mongoose, but I am getting ValidationError: Path 'email' is required., Path 'passwordHash' is required., Path 'username' is required. even though I am supplying email, passwordHash and username.
Here is the user schema.**
*productModel.js*
const mongoose = require("mongoose");
const Validator = require("Validator");
const productSchema = new mongoose.Schema({
name: {
type: String,
required:[true,"Please Enter Your Name"],
trim: true
},
description: {
type: String,
required: [true,"Please Enter Product Description"],
},
price: {
type: Number,
required: [true,"Please Enter Product Price"],
maxLength: [8, "Price cannot exceed 8 characters"],
},
ratings: {
type: Number,
default: 0,
},
images: [
{
public_id: {
type: String,
required: true,
},
url: {
type: String,
required: true,
},
},
],
category: {
type: String,
required: [true,"Please Enter Product Category"],
},
Stock: {
type: Number,
required: [true, "Please Enter product Stock"],
maxLength: [4, "Stock cannot exceed 4 characters"],
default: 1,
},
numOfReviews: {
type: Number,
default: 0,
},
reviews: [
{
user: {
type: mongoose.Schema.ObjectId,
ref: "User",
required: true,
},
name: {
type: String,
required: true,
},
rating: {
type: Number,
required: true,
},
comment: {
type: String,
required: true,
},
},
],
createdAt: {
type: Date,
default: Date.now,
},
});
**productRoute.js**
const express=require("express");
const { getAllProducts,createProduct } = require("../controllers/productController");
const router=express.Router();
router.route("/products").get(getAllProducts);
router.route("/product/new").post(createProduct);
module.exports=router
**server.js**
const app = require("./app");
const dotenv = require("dotenv");
const connectDatabase=require("./config/database");
//config
dotenv.config({path:"backend/config/config.env"});
//connecting to database
connectDatabase();
app.listen(process.env.PORT,()=>{
console.log('server is working on https://localhost:${process.env.PORT}')
});
**productController.js**
const Product=require("../models/productModel");
//Create Product
exports.createProduct=async(req,res,next)=>{
const product= await Product.create(req.body);
res.status(201).json({
success:true,
product,
});
}
exports.getAllProducts = (req,res)=>{
res.status(200).json({message:"Route is working fine"})
}
**database.js**
const mongoose=require("mongoose");
const connectDatabase =()=>{
mongoose.connect(process.env.DB_URI,{useNewUrlParser:true,useUnifiedTopology:true,
/*useCreateIndex:true*/}).then((data)=>{
console.log(`Mongodb connected with server:${data.connection.host}`);
}).catch((err)=>{
console.log(err);
})
}
module.exports =connectDatabase;
**Error**
this.$__.validationError = new ValidationError(this); ^
ValidationError: Product validation failed: category: Please Enter Product Category, price: Please Enter Product Price, description: Please Enter Product Description, name: Please Enter Your Name at model.Document.invalidate (C:\Users\HP\OneDrive\Desktop\E Commerce\node_modules\mongoose\lib\document.js:3097:32) at C:\Users\HP\OneDrive\Desktop\E Commerce\node_modules\mongoose\lib\document.js:2885:17 at C:\Users\HP\OneDrive\Desktop\E Commerce\node_modules\mongoose\lib\schematype.js:1349:9 at processTicksAndRejections (node:internal/process/task_queues:78:11) { errors: { category: ValidatorError: Please Enter Product Category at validate (C:\Users\HP\OneDrive\Desktop\E Commerce\node_modules\mongoose\lib\schematype.js:1346:13) at SchemaString.SchemaType.doValidate (C:\Users\HP\OneDrive\Desktop\E Commerce\node_modules\mongoose\lib\schematype.js:1330:7) at C:\Users\HP\OneDrive\Desktop\E Commerce\node_modules\mongoose\lib\document.js:2877:18 at processTicksAndRejections (node:internal/process/task_queues:78:11) { properties: { validator: [Function (anonymous)], message: 'Please Enter Product Category', type: 'required', path: 'category', value: undefined }, kind: 'required', path: 'category', value: undefined, reason: undefined, [Symbol(mongoose:validatorError)]: true }, price: ValidatorError: Please Enter Product Price at validate (C:\Users\HP\OneDrive\Desktop\E Commerce\node_modules\mongoose\lib\schematype.js:1346:13) at SchemaNumber.SchemaType.doValidate (C:\Users\HP\OneDrive\Desktop\E Commerce\node_modules\mongoose\lib\schematype.js:1330:7) at C:\Users\HP\OneDrive\Desktop\E Commerce\node_modules\mongoose\lib\document.js:2877:18 at processTicksAndRejections (node:internal/process/task_queues:78:11) { properties: { validator: [Function (anonymous)], message: 'Please Enter Product Price', type: 'required', path: 'price', value: undefined }, kind: 'required', path: 'price', value: undefined, reason: undefined, [Symbol(mongoose:validatorError)]: true }, description: ValidatorError: Please Enter Product Description at validate (C:\Users\HP\OneDrive\Desktop\E Commerce\node_modules\mongoose\lib\schematype.js:1346:13) at SchemaString.SchemaType.doValidate (C:\Users\HP\OneDrive\Desktop\E Commerce\node_modules\mongoose\lib\schematype.js:1330:7) at C:\Users\HP\OneDrive\Desktop\E Commerce\node_modules\mongoose\lib\document.js:2877:18 at processTicksAndRejections (node:internal/process/task_queues:78:11) { properties: { validator: [Function (anonymous)], message: 'Please Enter Product Description', type: 'required', path: 'description', value: undefined }, kind: 'required', path: 'description', value: undefined, reason: undefined, [Symbol(mongoose:validatorError)]: true }, name: ValidatorError: Please Enter Your Name at validate (C:\Users\HP\OneDrive\Desktop\E Commerce\node_modules\mongoose\lib\schematype.js:1346:13) at SchemaString.SchemaType.doValidate (C:\Users\HP\OneDrive\Desktop\E Commerce\node_modules\mongoose\lib\schematype.js:1330:7) at C:\Users\HP\OneDrive\Desktop\E Commerce\node_modules\mongoose\lib\document.js:2877:18 at processTicksAndRejections (node:internal/process/task_queues:78:11) { properties: { validator: [Function (anonymous)], message: 'Please Enter Your Name', type: 'required', path: 'name', value: undefined }, kind: 'required', path: 'name', value: undefined, reason: undefined, [Symbol(mongoose:validatorError)]: true } }, _message: 'Product validation failed' }