Что не так, что эта ошибка возникает при работе сервера Node.js? - PullRequest
1 голос
/ 09 июля 2020

Я получаю эту ошибку во время работы Node.js Сервер: CastError: Ошибка преобразования в ObjectId для значения «5f04cc85d5db3f0d582fb51a» на пути «_id» для модели «Blog»

Я пробовал все известные мне методы для этого, но он не работает.

Это код из blogapp. js Следуя маршрутам RESTful, я хочу показать более подробную информацию о сообщении с участием партикуляторов, когда Читать дальше нажимается. Но это не сработало, поэтому я решил распечатать ошибку, и вот что она показывает: 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.e js

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

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

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

1 Ответ

0 голосов
/ 09 июля 2020

Проблема в том, что ваш req.params.id содержит начальные пробелы:

" 5f04cc85d5db3f0d582fb51a", но он должен быть "5f04cc85d5db3f0d582fb51a"

Mon goose не обрезает никаких значений и, очевидно, не может приведите это значение к ObjectId.

Что вы могли бы сделать, это Blog.findById(req.params.id.trim()), чтобы убедиться, что пробелы удалены и / или убедитесь в клиентском коде, что вы не отправляете значение содержащие пробелы.

...