javascript - Mongoose - 转换为 ObjectId 失败

标签 javascript node.js mongodb express mongoose

我正在开发一个小型博客应用程序,但由于出现此错误而卡在这里 -

{
  "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,但是它的开头有一个空格,就像这样

  • ' 597c4ce202ca9c353fc80e8a' 并且在 url %20 中每次在 id 之前加起来,像这样 -> http://localhost:5000/blogs/%20597c4ce202ca9c353fc80e8a如果我从 url 中删除 %20,则会显示请求的页面。 我被困在这里很长时间了,我还没有找到解决办法。请帮忙

最佳答案

感觉ObjectId不合法。你正在过去。 请检查:

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

关于javascript - Mongoose - 转换为 ObjectId 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45398686/

相关文章:

c# - Mongodb C# 序列化器 - 循环引用

javascript - angular.element 和 document.getElementById 有什么区别

javascript - JQuery UI 自动完成 - 无法加载对象

javascript - 从 amazon-lambda 发送 post 请求时出现问题

node.js - 如何修复 Node 模块 live-server 以使用 require ('open' ) 而不是 require ('opn' )

node.js - morgan 记录器并未记录所有要归档的内容

javascript - js.erb 和 css.erb 文件上良好的代码突出显示、语法分析和代码辅助编辑器

嵌入式文档的 Javascript MongoDB 点符号问题

java - Spring Data + Mongo- 无分组字段求和

node.js - 无法访问 Mongoose 保存回调中的变量