Please look at this code:
// Update route
router.put("/:comment_id", function (req, res) {
Campground.findOneAndUpdate(
{"_id": req.params.id, "comments._id": req.params.comment_id },
{"$set": {"comments.$.text": req.body.comment.text}},
function (err, campground) {
if (err) {
console.log("campground: " + campground); //logs campground: undefined
console.log("comment id: " + req.params.comment_id); // logs comment id: 5a5f2ab0a6dccd210c0136de
console.log("campground id: " + req.params.id); // logs campground id: 5a5e083af62da603900ab0d4
res.redirect("/campgrounds");
} else {
res.redirect("/campgrounds/" + campground._id);
}
}
);
});
the ids refers to an url like this:
http://localhost:4000/campgrounds/5a5e083af62da603900ab0d4/comments/5a5e0845f62da603900ab0d5/edit
This is weird for me, why I cannot reach campground? In this way i cannot update the doc I need. Please help me to find a solution.
EDIT: Error provided by console.log(err); :
{ CastError: Cast to ObjectId failed for value "secondo me no" at path "comments"
at new CastError (folder\node_modules\mongoose\lib\error\cast.js:27:11)
at ObjectId.cast (folder\node_modules\mongoose\lib\schema\objectid.js:158:13)
at ObjectId.SchemaType.applySetters (folder\node_modules\mongoose\lib\schematype.js:695:12)
at ObjectId.SchemaType._castForQuery (folder\node_modules\mongoose\lib\schematype.js:1066:15)
at ObjectId.castForQuery (folder\node_modules\mongoose\lib\schema\objectid.js:198:15)
at ObjectId.SchemaType.castForQueryWrapper (folder\node_modules\mongoose\lib\schematype.js:1035:15)
at castUpdateVal (folder\node_modules\mongoose\lib\services\query\castUpdate.js:345:19)
at walkUpdatePath (folder\node_modules\mongoose\lib\services\query\castUpdate.js:229:22)
at castUpdate (folder\node_modules\mongoose\lib\services\query\castUpdate.js:72:18)
at model.Query._castUpdate (folder\node_modules\mongoose\lib\query.js:2991:10)
at castDoc (folder\node_modules\mongoose\lib\query.js:3017:18)
at model.Query.Query._findAndModify (folder\node_modules\mongoose\lib\query.js:2292:19)
at model.Query.Query._findOneAndUpdate (folder\node_modules\mongoose\lib\query.js:2139:8)
at folder\node_modules\kareem\index.js:276:8
at folder\node_modules\kareem\index.js:23:7
at _combinedTickCallback (internal/process/next_tick.js:131:7)
message: 'Cast to ObjectId failed for value "secondo me no" at path "comments"',
name: 'CastError',
stringValue: '"secondo me no"',
kind: 'ObjectId',
value: 'secondo me no',
path: 'comments',
reason: undefined }
@Younel this is the Edit view:
<% include ../partials/header %>
<div class="container">
<div class="row">
<h1 style="text-align: center;">Edit Comment</h1>
<div style="width: 30%; margin:25px auto;">
<form action="/campgrounds/<%= campground_id %>/comments/<%= comment._id %>?_method=PUT" method="POST">
<div class="form-group">
<input class="form-control" type="text" name="comment[text]" value="<%= comment.text %>">
</div>
<div class="form-group">
<button class="btn btn-lg btn-primary btn-block">Submit!</button>
</div>
</form>
<a href="/campgrounds">Go Back</a>
</div>
</div>
</div>
<% include ../partials/footer %>
"secondo me no" is the comment[text] value
This is a github repo: https://github.com/ufollettu/YelpCamp.git (run v10/app.js)
console.log(err)? You know there's an error, but you're not even logging it.req.params.idis set as expected? It seems your program gets the comment id properly, but fails to find the Campground, which suggests the Campground id is not being properly passed to the mongoose model.var commentsRoutes = require("./routes/comments")andapp.use("/campgrounds/:id/comments", commentsRoutes);in my appundefined error. It's clearlyCast to ObjectId failed. Apparently it's getting passed"secondo me no"as an _id