Skip to content
Advertisement

Getting Error while posting a request, ValidationError: TodoTask validation failed: user: Cast to ObjectId failed for value

i am getting an error while trying to post a todo to the database. ValidationError: TodoTask validation failed: user: Cast to ObjectId failed for value

  id: 62e02a03c5f6c427c8c3ed44,
  user: {
    _id: 62e02a03c5f6c427c8c3ed44,
    name: 'abc',
    email: 'someemail@example.com',
    password: '$2a$10$C....',
    admin: true,
    date: 2022-07-26T17:53:07.645Z,
    __v: 0
  }
}"(type Object) at path "user"

My function for posting the request :

  const todoTask = await new TodoTask({
    content: req.body.content,
    user: {
      id: req.user._id,
      user: req.user,
    },
  });
  try {
    await todoTask.save(function (err, doc) {
      if (err) throw err;
      console.log("item saved!");
    });
    return res.redirect("/dashboard");
  } catch (err) {
    return res.redirect("/dashboard");
    console.log(err);
  }
};    

Schema is defined as :

  content: {
    type: String,
    required: true,
  },
  date: {
    type: Date,
    default: Date.now,
  },
  user: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "User",    
  },
});
module.exports = mongoose.model("TodoTask", todoTaskSchema);

Advertisement

Answer

Since the user property is defined as a ref you should just store the _id in it:

const todoTask = await new TodoTask({
    content: req.body.content,
    user: req.user._id,
  });
  try {
    await todoTask.save(function (err, doc) {
      if (err) throw err;
      console.log("item saved!");
    });
    return res.redirect("/dashboard");
  } catch (err) {
    return res.redirect("/dashboard");
    console.log(err);
  }
};   

When retrieving user’s information you will just need to populate the TodoTask, for example:

const totoTask = await TodoTask.populate('user').exec();
User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement