快速.js CRUD应用程序错误:更新功能重定向错误



>更新:

马图斯·杜布拉瓦,你是对的,核心,但我把那行改为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);
}
});
});

该帖子确实得到了更新,但是:

  1. 重定向网址http://localhost:3000/post/show/:pid;
  2. 浏览器显示Cannot read property 'title' of undefined

我的错误在哪里?

PS:我无法在此处添加所有代码,因此我将粘贴箱放在一起。

当您调用重定向时,此/post/show/:pid只是一个普通字符串,您也可以从重定向到的 url 中看到它 -http://localhost:3000/post/show/:pid(请参阅它的最后一部分)。或者换句话说,字符串中的:pid不会自动替换,这与内部执行此替换的getpostapp方法不同。

您可以自己简单地构建字符串

url = "/post/show/" + pid;
res.redirect(url);

我很惊讶你能做到这么远而没有错误。该错误表明您在呈现"/post/show/:id"路由时无法成功检索post对象。根据您的代码段,您似乎没有在重定向网址中传递正确的帖子 ID。

您可以通过几种方式引用您的帖子 ID(例如req.body.post_idpost.pidreq.params.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);
}
});
});

您的代码没有用于/post/show/:pid的处理程序,或者您尚未显示完整的代码。这意味着一旦更新完成,您需要再次返回编辑页面。如果是这种情况,那么您需要将代码行从

res.redirect('/post/show/:pid');

res.redirect('/post/edit/' + pid);

相关内容

最新更新