2017-07-30 27 views
1

ich auf einem kleinen Blog App arbeite, und ich bin hier fest an diese fehler-Mungo - Cast zu ObjectId gescheitert

{ 
    "message": "Cast to ObjectId failed for value \" 597c4ce202ca9c353fc80e8a\" at path \"_id\" for model \"Blog\"", 
    "name": "CastError", 
    "stringValue": "\" 597c4ce202ca9c353fc80e8a\"", 
    "kind": "ObjectId", 
    "value": " 597c4ce202ca9c353fc80e8a", 
    "path": "_id" 
} 

I findById bin mit - Hier den Code

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 
      }); 
     } 
    }); 
}); 

hier ist die app.js

Datei
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"); 
}); 

hier ist 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 %> 

und hier ist show.ejs

<div class="ui main text container segment"> 
    <div class="ui huge header"><%= blog.title %></div> 
</div> 

<% include ./partials/footer %> 

Nach console.log, ich die richtige id bekam aber es hat einen Platz am Anfang wie diese

  • '597c4ce202ca9c353fc80e8a' und in der URL% 20 summiert sich jedes Mal vor der ID, so ->http://localhost:5000/blogs/%20597c4ce202ca9c353fc80e8a und wenn ich% 20 von URL entferne dann erscheint die angeforderte Seite. Ich bin hier für eine lange Zeit stecken geblieben und ich habe keine Lösung gefunden. Bitte helfen Sie
+0

[ 'String.prototype.trim()'] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/trim) . Es entfernt "Leerzeichen", was Sie am Anfang des Wertes in der URL haben. Wahrscheinlich aufgrund eines Fehlers in der Vorlage, in der Sie den Linkwert lesen. Repariere es an einem der Orte. –

+0

schneiden Sie Ihre ID str.trim mit() entfernen Leerzeichen – Kamesh

+0

i \t verwendet \t \t String.prototype.trim (req.params.id); aber immer noch gleichen Fehler – kamal11

Antwort

0

Es fühlt sich an wie ObjectId nicht gültig ist. Das du passierst. bitte überprüfen Sie es mit:

var mongoose = require('mongoose'); 
mongoose.Types.ObjectId.isValid('your id here'); 
+0

bekommen gleichen Fehler danach, bitte verstehe meine Frage und helfe mir bin gerade hier stecken. – kamal11

+0

versuchen Sie es mit findOne ({_ id: 'yourIdHere'}); –

+0

Ich habe es bereits versucht und es gibt auch den gleichen Fehler – kamal11

Verwandte Themen