Express.js 嵌套路由的数据关联问题
data association problem with nested route with Express.js
假设我想要大致如下所示的 REST 端点:
/blogs
/blogs/new
/blogs/:id
/blogs/:id/edit
/blogs/:id/comments/new
每个 if 上的 CRUD 都有意义。例如,/blogs POST 创建一个新博客,GET 获取所有博客。 /blogs/:id GET 只获取那个带有相关评论的博客。 /blogs/:id/comments/ POST 为该特定博客创建新评论
现在一切正常,但与每个博客的评论关联无法正常工作。我认为我的模型或 /blogs/:id/comments/new route 造成了该错误。
博客架构
var blogSchema=new mongoose.Schema({
title:String,
image:String,
body:{type:String, default:""},
created:{ type: Date },
comments:[{
type:mongoose.Schema.Types.ObjectId,
ref:'Comment'
}]
});
评论架构
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);
}
})
}
})
})
终于 /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})
}
})
})
错误:
我知道如果不使用它就很难理解所有这些东西,这就是为什么我提供我的虚拟 environment 在那里你可以找到我的项目并且可以操作 it.Any赞赏。
感谢您的宝贵时间。
提前致谢。
req.body.comment
是 {title:'emon',body:'new comment'}
。这不符合 commentSchema
中定义的内容。更改它以适应模式结构将解决问题。
假设我想要大致如下所示的 REST 端点:
/blogs
/blogs/new
/blogs/:id
/blogs/:id/edit
/blogs/:id/comments/new
每个 if 上的 CRUD 都有意义。例如,/blogs POST 创建一个新博客,GET 获取所有博客。 /blogs/:id GET 只获取那个带有相关评论的博客。 /blogs/:id/comments/ POST 为该特定博客创建新评论
现在一切正常,但与每个博客的评论关联无法正常工作。我认为我的模型或 /blogs/:id/comments/new route 造成了该错误。
博客架构
var blogSchema=new mongoose.Schema({
title:String,
image:String,
body:{type:String, default:""},
created:{ type: Date },
comments:[{
type:mongoose.Schema.Types.ObjectId,
ref:'Comment'
}]
});
评论架构
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);
}
})
}
})
})
终于 /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})
}
})
})
错误:
我知道如果不使用它就很难理解所有这些东西,这就是为什么我提供我的虚拟 environment 在那里你可以找到我的项目并且可以操作 it.Any赞赏。
感谢您的宝贵时间。
提前致谢。
req.body.comment
是 {title:'emon',body:'new comment'}
。这不符合 commentSchema
中定义的内容。更改它以适应模式结构将解决问题。