проблема ассоциации данных с вложенным маршрутом с Express.js - PullRequest
0 голосов
/ 21 сентября 2019

Предположим, я хочу, чтобы конечные точки REST выглядели примерно так:

/blogs
/blogs/new
/blogs/:id
/blogs/:id/edit
/blogs/:id/comments/new

CRUD для каждого if, если имеет смысл.Например, / blogs POST создает новый блог, GET выбирает все блоги./ blogs /: id GET выбирает только один блог с соответствующими комментариями./ blogs /: id / comments / POST создает новый комментарий к этому конкретному блогу

Теперь все работает отлично, но связь комментариев с каждым блогом работает неправильно.Я думаю, что мои модели или / blogs /: id / comments / new route создают эту ошибку.
blogSchema

var blogSchema=new mongoose.Schema({
    title:String,
    image:String,
    body:{type:String, default:""},
    created:{ type: Date },
  comments:[{
    type:mongoose.Schema.Types.ObjectId,
    ref:'Comment'
  }]
});

commentSchema

var commentSchema=mongoose.Schema({
    text:String,
    author:String
})

весь маршрут, связанный с комментарием

app.get('/blogs/:id/comments/new',function(req,res){
    //find blog by id
    Blog.findById(req.params.id,function(err,blog){
        if(err){
            console.log(err)
        }else{
            res.render('comments/new.ejs',{blog:blog})
        }
    })
})
app.post('/blogs/:id/comments',function(req,res){
    //lookup blog using id
    Blog.findById(req.params.id,function(err,blog){
        if(err){
            console.log(err)
        }else{
            Comment.create(req.body.comment,function(err,comment){
                if(err){
                    console.log(err)
                }else{
                    blog.comments.push(comment);
                    blog.save()
                    res.redirect('/blogs/'+blog._id);
                }
            })
        }
    })
})

finally / blogs /: id

app.get('/blogs/:id',function(req,res){
    Blog.findById(req.params.id).populate('comments').exec(function(err,foundBlog){ 
        if(err){
            console.log(err)
            res.redirect('/blogs')
        }else{
            res.render('blogs/show.ejs',{blog:foundBlog})
        }
    })
})

Ошибка :
image
IЯ знаю, что довольно сложно понять все эти вещи, не работая с ним, поэтому я даю свою виртуальную среду , где вы найдете мой проект и сможете им манипулировать. Любая помощь будет признательна.
Спасибо за ваше время.Заранее спасибо.

1 Ответ

0 голосов
/ 22 сентября 2019

req.body.comment - это {title:'emon',body:'new comment'}.Это не соответствует тому, что определено в commentSchema.Измените его в соответствии со структурой схемы, чтобы решить проблему.

...