You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express.js CRUD应用更新功能重定向异常问题求助

问题诊断与修复方案

我来帮你排查这两个问题的根源:

1. 重定向URL错误(/post/show/:pid)

你在更新路由的回调里犯了一个变量未定义的错误:

res.redirect('/post/show/' + pid); // 这里的pid根本没有声明过!

你代码里只定义了post.pid = req.body.post_id,但这个post.pid是局部对象的属性,不是独立变量。更关键的是:你完全不需要这个pid字段——你更新帖子是基于URL里的:id(也就是MongoDB自动生成的_id)来操作的,直接用req.params.id就能拿到正确的帖子ID。

2. 模板报错“Cannot read property 'title' of undefined”

这个错误是重定向错误的连锁反应:因为你重定向到了一个无效的ID(未定义的pid导致URL里是无效值),Post.findById找不到对应的帖子,返回的post是undefined,渲染模板时访问post.title自然就报错了。


修复后的完整代码

更新路由代码(修正变量错误+简化逻辑)

// Update post
app.post('/post/edit/:id', function(req, res){
  // 只收集需要更新的字段,去掉多余的pid
  let postData = {
    title: req.body.title,
    category: req.body.category,
    body: req.body.body
  };
  let query = {_id: req.params.id};
  
  // 用req.params.id做重定向,这是当前帖子的有效ID
  Post.update(query, postData, function(err){
    if (err) {
      console.log(err);
      return;
    } else {
      res.redirect('/post/show/' + req.params.id);
    }
  });
});

简化后的编辑表单(删除多余的隐藏字段)

h2 #{title}
form(action="/post/edit/" + post._id, method="POST")
  .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")

进阶优化建议

推荐使用Mongoose的findByIdAndUpdate方法,它更简洁且能返回更新后的文档,可靠性更高:

// Update post(优化版)
app.post('/post/edit/:id', function(req, res){
  const { title, category, body } = req.body;
  
  // { new: true } 配置会让方法返回更新后的文档
  Post.findByIdAndUpdate(req.params.id, { title, category, body }, { new: true }, function(err, updatedPost){
    if (err) {
      console.log(err);
      return;
    } else {
      res.redirect('/post/show/' + updatedPost._id);
    }
  });
});

这样修改后,重定向会指向正确的帖子展示页面,模板也能拿到有效的post数据,两个问题都会解决。

内容的提问来源于stack exchange,提问作者Razvan Zamfir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:38:57