I took out its declaration because of the error saying I can’t modify it. I want to know how to get around the error and/or correctly set the _id
field.
My app.post
callback code was originally like this:
app.post("/api/exercise/new-user", (req, res) => {
const username = req.body.username;
User.find({}, (err, users) => {
if (err) {
console.log(err);
}
const id = users.length;
const user = new User({
username: username,
_id: id
});
User.findOne({ username: username }, (err, foundUser) => {
if (err) {
console.log(err);
}
if (!foundUser) {
user.save((err, user) => {
if (err) {
console.log(err);
}
console.log(`user ${user.username} saved to database!`);
});
}
});
res.json({ user });
});
});
And when I try to submit a user with this code, I get this error in the console now (was telling me before that I can’t modify the _id
manually):
Error: user validation failed: _id: Cast to ObjectId failed for value "0" at path "_id"
at ValidationError.inspect (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\error\validation.js:47:26)
at internal/per_context/primordials.js:23:32
at formatValue (internal/util/inspect.js:783:19)
at inspect (internal/util/inspect.js:337:10)
at formatWithOptionsInternal (internal/util/inspect.js:2016:40)
at formatWithOptions (internal/util/inspect.js:1898:10)
at console.value (internal/console/constructor.js:323:14)
at console.log (internal/console/constructor.js:358:61)
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\server.js:50:21
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\model.js:4870:16
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\helpers\promiseOrCallback.js:16:11
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\model.js:4893:21
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\model.js:500:16
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\kareem\index.js:247:48
at next (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\kareem\index.js:168:27)
at next (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\kareem\index.js:170:9) {
errors: {
_id: CastError: Cast to ObjectId failed for value "0" at path "_id"
at ObjectId.cast (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\schema\objectid.js:281:11)
at ObjectId.SchemaType.applySetters (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\schematype.js:1091:12)
at model.$set (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\document.js:1280:20)
at model.$set (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\document.js:1024:16)
at model.Document (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\document.js:148:12)
at model.Model (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\model.js:105:12)
at new model (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\model.js:4713:15)
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\server.js:37:18
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\model.js:4870:16
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\model.js:4870:16
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\helpers\promiseOrCallback.js:24:16
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\model.js:4893:21
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\query.js:4400:11
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\kareem\index.js:136:16
at processTicksAndRejections (internal/process/task_queues.js:75:11) {
stringValue: '"0"',
messageFormat: undefined,
kind: 'ObjectId',
value: 0,
path: '_id',
reason: Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
at new ObjectID (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\bson\lib\bson\objectid.js:59:11)
at castObjectId (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\cast\objectid.js:25:12)
at ObjectId.cast (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\schema\objectid.js:279:12)
at ObjectId.SchemaType.applySetters (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\schematype.js:1091:12)
at model.$set (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\document.js:1280:20)
at model.$set (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\document.js:1024:16)
at model.Document (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\document.js:148:12)
at model.Model (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\model.js:105:12)
at new model (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\model.js:4713:15)
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\server.js:37:18
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\model.js:4870:16
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\model.js:4870:16
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\helpers\promiseOrCallback.js:24:16
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\model.js:4893:21
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\query.js:4400:11
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\kareem\index.js:136:16
}
},
_message: 'user validation failed'
}
E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\helpers\promiseOrCallback.js:19
throw error;
^
TypeError: Cannot read property 'username' of undefined
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\server.js:52:36
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\model.js:4870:16
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\helpers\promiseOrCallback.js:16:11
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\model.js:4893:21
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\model.js:500:16
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\kareem\index.js:247:48
at next (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\kareem\index.js:168:27)
at next (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\kareem\index.js:170:9)
at Kareem.execPost (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\kareem\index.js:218:3)
at _handleWrapError (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\kareem\index.js:246:21)
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\kareem\index.js:273:14
at _next (E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\kareem\index.js:95:14)
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\kareem\index.js:508:38
at processTicksAndRejections (internal/process/task_queues.js:75:11)
Emitted 'error' event on Function instance at:
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\model.js:4872:13
at E:\programming\visual_studio_code\boilerplate-project-exercisetracker\node_modules\mongoose\lib\helpers\promiseOrCallback.js:16:11
[... lines matching original stack trace ...]
at processTicksAndRejections (internal/process/task_queues.js:75:11)
and I get this JSON object in the browser as the response:
{"user":{"_id":"604d31e8174c225d144b3bbf","username":"DragonOsman"}}
It has to be {"username": <username>, "_id": <id>}
doesn’t it?
So yeah, please help me out here.