我正在开发一个小博客应用程序,我被困在这个错误 -
{
"message": "Cast to ObjectId failed for value \" 597c4ce202ca9c353fc80e8a\" at path \"_id\" for model \"Blog\"",
"name": "CastError",
"stringValue": "\" 597c4ce202ca9c353fc80e8a\"",
"kind": "ObjectId",
"value": " 597c4ce202ca9c353fc80e8a",
"path": "_id"
}
我正在使用findById - 这是代码
app.get("/blogs/:id", function(req, res) {
Blog.findById(req.params.id, function(err, foundBlog) {
if (err) {
res.send(err);
} else {
res.render("show", {
blog: foundBlog
});
}
});
});
这是app.js文件
const bodyParser = require('body-parser'),
mongoose = require('mongoose'),
express = require('express'),
app = express();
//APP CONFIG
mongoose.connect("mongodb://localhost/blog_rest");
app.set("view engine", "ejs");
app.use(express.static("public"));
app.use(bodyParser.urlencoded({ extended: true}));
//MONGOOS MODEL CONFIG
var blogSchema = new mongoose.Schema({
title: String,
image: String,
body: String,
created: { type: Date, default: Date.now}
})
var Blog = mongoose.model("Blog", blogSchema);
// Blog.create({
// title: "TEST BLOG",
// image: "https://images.pexels.com/photos/457443/pexels-photo-457443.jpeg?h=350&auto=compress&cs=tinysrgb",
// body: "First App in the series"
// })
//RESTFUL ROUTES
app.get("/", function (req,res) {
res.redirect("/blogs");
});
//INDEX ROUTE
app.get("/blogs", function (req,res) {
Blog.find({}, function (err,blogs) {
if(err){
// res.send("ERROR");
console.log(err);
}
else {
res.render("index", {blogs: blogs});
}
})
});
//NEW ROUTE
app.get("/blogs/new", function (req,res) {
res.render("new");
});
//CREATE ROUTE
app.post("/blogs", function (req,res) {
//Create Blog///////Blog.create takes two parameters first is the data which is in req.body.blog and second is the callback function
Blog.create(req.body.blog, function (err, newBlog) {
if (err) {
res.render("new");
}
else {
res.redirect("/blogs");
}
});
});
//SHOW ROUTE
app.get("/blogs/:id", function (req,res) {
//String.prototype.trim(req.params.id);
console.log(req.params.id);
Blog.findById(req.params.id, function (err,foundBlog) {
if (err) {
res.send(err);
} else {
res.render("show", {blog: foundBlog});
}
});
});
app.listen(5000, function () {
console.log("Server is listening on Port: 5000");
});
这里是new.ejs:
<% include ./partials/header %>
<div class="ui main text container segment">
<div class="ui huge header">New Blog</div>
<form class="ui form" action="/blogs" method="post">
<div class="field">
<label>Title</label>
<input type="text" name="blog[title]" placeholder="Title">
</div>
<div class="field">
<label>Image</label>
<input type="text" name="blog[image]" placeholder="Image">
</div>
<div class="field">
<label>Blog Content</label>
<textarea name="blog[body]"></textarea>
</div>
<input class="ui blue inverted button" type="submit">
</form>
</div>
<% include ./partials/footer %>
这里是show.ejs
<div class="ui main text container segment">
<div class="ui huge header"><%= blog.title %></div>
</div>
<% include ./partials/footer %>
在console.log之后,我得到了正确的id,但它在开头有一个像这样的空间
答案 0 :(得分:0)
感觉ObjectId无效。你正在路过。 请查看:
var mongoose = require('mongoose');
mongoose.Types.ObjectId.isValid('your id here');
答案 1 :(得分:0)
您需要在模型中指定“ id”的类型为ObjectId,如以下示例所示:
const Schema = new mongoose.Schema({
_id: ObjectID,
....
})
这应该可以解决问题!