Home > OS >  error Product validation failed: userId: Path `userId` is required in nodejs a
error Product validation failed: userId: Path `userId` is required in nodejs a

Time:07-09

i m creating a small shop app with: node.js & express and mongoose and I m facing a problem when I try to send the data to the mongoose database

this is my product class

const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const productSchema = new Schema({
  title: { type: String, required: true },
  price: { type: Number, required: true },
  description: { type: String, required: true },
  imageUrl: { type: String, required: true },
  userId: { type: Schema.Types.ObjectId, required: true }
});

module.exports = mongoose.model("Product", productSchema);

and this is the function to send in the controller

exports.postAddProduct = (req, res, next) => {
  console.log(req.user);
  const product = new Product({
    title: req.body.title,
    price: req.body.price,
    description: req.body.description,
    imageUrl: req.body.imageUrl,
    userId: req.user  });
  product
    .save()
    .then((result) => {
      console.log("Product created!");
      res.redirect("/admin/products");
    })
    .catch((err) => {
      console.log(err);
    });
};

and this is the error

Error: Product validation failed: userId: Path `userId` is required.
    at ValidationError.inspect (C:\Users\lenovo\Desktop\CURRENT_PROJECTS\node_tuto\node_modules\mongoose\lib\error\validation.js:48:26)
    at formatValue (internal/util/inspect.js:745:19)
    at inspect (internal/util/inspect.js:319:10)

also when I print the req.user in the function exports.postAddProduct it gives me undefined

this is app.JS

const express = require("express");
const bodyParser = require("body-parser");

const app = express();
app.set("view engine", "ejs");
app.set("views", "./views");

const path = require("path");

const adminRoutes = require("./routes/admin");
const shopRoutes = require("./routes/shop");

const pageNotFoundController = require("./controllers/404");
const mongoose = require("mongoose");
const User = require("./models/user");

app.use(bodyParser.urlencoded({ extended: false }));

app.use(express.static(path.join(__dirname, "public")));

app.use((req, res, next) => {
  User.findById("62c71d0ab0312958a8082d6f")
    .then((user) => {
      console.log('user'   user)
      req.user = user;
      // next();
    })
    .catch((err) => console.log(err));
  next();
});

app.use("/admin", adminRoutes.routes);

app.use(shopRoutes);

app.use(pageNotFoundController.getPageNotFound);

mongoose
  .connect(
    "HERE MY URL "
  )
  .then((result) => {
    User.findOne().then((user) => {
      if (!user) {
        const user = new User({
          name: 'Aimen',
          email: 'Aimen@',
          cart: {
            items: []
          }
        });
        user.save();
      } else {
        console.log('user already there');
      }
    });
    console.log("Connected to MongoDB");
    app.listen(3000);
  })
  .catch((err) => console.log(err));

CodePudding user response:

Is your req.user a string on an object? If is a string you can try something like: mongoose.Types.ObjectId(string).

exports.postAddProduct = (req, res, next) => {
  console.log(req.user);
  const product = new Product({
    title: req.body.title,
    price: req.body.price,
    description: req.body.description,
    imageUrl: req.body.imageUrl,
    userId: mongoose.Types.ObjectId(req.user)
  });
  product
    .save()
    .then((result) => {
      console.log("Product created!");
      res.redirect("/admin/products");
    })
    .catch((err) => {
      console.log(err);
    });
};

CodePudding user response:

the bug was because in the middleware i was commenting the next() fun so the programme was stopping there

  • Related