【问题标题】:What is wrong that I am having this error coming while running Node.js server?运行 Node.js 服务器时出现此错误是什么问题?
【发布时间】:2020-07-09 19:54:54
【问题描述】:

运行 Node.js 服务器时出现此错误: CastError:模型“博客”的路径“_id”处值“5f04cc85d5db3f0d582fb51a”的值“5f04cc85d5db3f0d582fb51a”转换为 ObjectId 失败

我已经尝试了所有我知道的方法来做到这一点,但它不起作用。

这是来自 blogapp.js 的代码 在 RESTful Routes 之后,我想在单击 Read more 时显示有关特定帖子的更多详细信息。但它不起作用,所以我决定打印错误,这就是它所显示的内容:Casterror: .....

var express    = require('express');
    app        = express();
    bodyParser = require('body-parser');
    mongoose   = require('mongoose')   
// APP CONFIG
mongoose.connect('mongodb://localhost/restful_blog_app', { useNewUrlParser: true, useUnifiedTopology: true});

app.set('view engine', 'ejs');
app.use(express.static('Public'));
app.use(bodyParser.urlencoded({extended:true}))

// MONGOOSE/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)
 


// RESTFUL ROUTES
app.get('/', (req,res) => {
    res.redirect('/blogs')
})
// INDEX ROUTE
app.get('/blogs', (req,res) => {
    Blog.find({}, (err, blogs) => {
        if(err){
            console.log(err);
        }else{
            res.render('blogindex', {blogs:blogs})
        }
    })
});
// NEW ROUTE
app.get('/blogs/new', (req,res) => {
    res.render('blognew')
});
// CREATE ROUTE
app.post('/blogs', (req,res) => {
    //   create blog
    
    Blog.create(req.body.blog, (err, newBlog) => {
       if(err){
           res.render('new');
       }else{
        //    then redirect to the index 
           res.redirect('/blogs')
       }
    });
});
// SHOW ROUTE
app.get('/blogs/:id', (req,res) => {
    
    Blog.findById(req.params.id , (err, Blog)=>{
      if(err){
          res.send(` ${err}`);
      }else{
        res.render('blogshow', {blog: Blog})
      }
    });
});
app.listen('5000', ()=>{
    console.log("Blog Server running on port 5000");
    
});

我不知道我哪里弄错了 这是来自 blogshow.ejs 的代码

<%- include ('partials/blogheader') %>

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

<%- include ('partials/blogfooter') %>

【问题讨论】:

  • 您的 mongoDB 架构上的 _id 类型是什么?是字符串还是 ObjectId?

标签: node.js mongodb express body-parser


【解决方案1】:

问题是您的 req.params.id 包含一个前导空格:

" 5f04cc85d5db3f0d582fb51a" 但应该是"5f04cc85d5db3f0d582fb51a"

Mongoose 不会修剪任何值,显然不能将此值转换为 ObjectId

您可以做的是Blog.findById(req.params.id.trim()),以确保删除空格和/或确保在客户端代码中您没有发送包含空格的值。

【讨论】:

    猜你喜欢
    • 2015-11-03
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    相关资源
    最近更新 更多