更新:
Matus Dubrava,您是正确的核心,但是我将该行更改为res.redirect('/post/show/' + pid);
,但仍然无效。路线为http://localhost:3000/post/edit/5d0fddd730d83f0c32c1e0ca
负责显示单个帖子的代码片段确实起作用。是:
app.get('/post/show/:id', function(req, res){
Post.findById(req.params.id, function(err, post){
res.render('single_post.pug', {
post: post
});
});
});
但是,使用res.redirect('/post/show/' + pid);
重定向仍然无效。
我正在使用 Node , MongoDB 和 Express 开发基本的CRUD应用程序。我将Jade用作视图广告和Bootstrap 4的样式。
有一个编辑帖子功能可以正常运行,但是我的更新存在一个我无法发现和修复的错误:
编辑表单视图:
h2 #{title}
form(action="/post/edit/" + post._id, method="POST")
.form-group
input.form-control(type="hidden", name="post_id", value=post.post_id)
.form-group
input.form-control(type="text", name="title", placeholder="Post title" value=post.title)
.form-group
input.form-control(type="text", name="category", placeholder="Post category" value=post.category)
.form-group
textarea.form-control(rows="5", name="body")= post.body
.form-group
input.btn.btn-sm.btn-block.btn-primary(type="submit", value="Update")
与修改和更新操作相对应的代码:
// Edit post
app.get('/post/edit/:id', function(req, res){
Post.findById(req.params.id, function(err, post){
res.render('edit_post.pug', {
post: post
});
});
});
// Update post
app.post('/post/edit/:id', function(req, res){
let post = {};
post.pid = req.body.post_id;
post.title = req.body.title;
post.category = req.body.category;
post.body = req.body.body;
let query = {_id:req.params.id}
Post.update(query, post, function(err){
if (err) {
console.log(err);
return;
} else {
res.redirect('/post/show/' + pid);
}
});
});
帖子确实得到更新,但是:
http://localhost:3000/post/show/:pid
; Cannot read property 'title' of undefined
。我的错误在哪里?
PS::我无法在此处添加所有代码,因此我将 this 粘贴到了一起。
答案 0 :(得分:3)
在调用重定向时,此/post/show/:pid
只是一个普通的字符串,您也可以从URL中看到您将其重定向到-http://localhost:3000/post/show/:pid
(请参阅最后一部分)。或者换句话说,不会自动替换字符串中的:pid
,这与get
的{{1}}或post
方法在内部执行替换的情况不同。
您可以自己构建字符串
app
答案 1 :(得分:2)
令我惊讶的是,您所取得的成就无误。该错误表明,渲染“ / post / show /:id”路由时,您无法成功检索post
对象。根据您的代码段,您似乎没有在重定向URL中传递正确的帖子ID。
您可以通过几种方式(例如req.body.post_id
,post.pid
或req.params.id
)来引用您的帖子ID,但是您使用的是pid
:
res.redirect('/post/show/' + pid);
pid
未定义。尝试将更新代码更新为以下内容:
// Update post
app.post('/post/edit/:id', function(req, res){
let post = {};
post.pid = req.body.post_id;
post.title = req.body.title;
post.category = req.body.category;
post.body = req.body.body;
let query = {_id:req.params.id}
Post.update(query, post, function(err){
if (err) {
console.log(err);
return;
} else {
res.redirect('/post/show/' + req.params.id);
}
});
});
答案 2 :(得分:0)
您的代码没有/post/show/:pid
的处理程序,或者您没有显示完整的代码。这意味着更新完成后,您需要再次返回编辑页面。如果是这种情况,则需要从以下位置更改代码行
res.redirect('/post/show/:pid');
到
res.redirect('/post/edit/' + pid);