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

Node.js注册用户公开资料页面故障排查与修复

修复后的用户公开资料页面代码

原代码存在的问题

  • 未正确获取URL路径中的用户ID:/u/:id的ID需从req.params.id获取,而非req.body,且冗余的临时user对象毫无作用
  • SQL查询未传入参数:db.each未传递req.params.id作为查询条件,导致SQL语句的占位符?未被替换,无法匹配目标用户
  • 查询结果处理逻辑错误:用户ID是唯一标识,使用db.get(获取单条结果)比db.each更合适;未处理“未找到用户”的场景
  • 模板渲染参数错误:foundUser是包含id字段的对象,需传递foundUser.id给模板,或直接传递对象后在模板中读取id
  • 模板文件名不统一:一处用profile.ejs,另一处用profile,需保持一致

修复后的完整代码

app.get("/profile", (req, res) => {
  res.render("profile.ejs", { id: req.user.id });
});

app.get("/u/:id", (req, res) => {
  // 使用db.get获取单条用户记录,传入URL中的id作为查询参数
  db.get(`SELECT id FROM users WHERE id = ?;`, [req.params.id], function (err, foundUser) {
    if (err) {
      req.flash("error", "数据库查询出错");
      return res.redirect("/");
    }
    // 判断是否找到用户
    if (!foundUser) {
      req.flash("error", "该用户不存在");
      return res.redirect("/");
    }
    // 传递用户ID给模板,保持和/profile路由一致的参数格式
    res.render("profile.ejs", { id: foundUser.id });
  });
});

关键修改说明

  • 移除冗余的user对象,直接从req.params.id获取URL中的用户ID
  • 将db.each替换为db.get,并添加查询参数数组[req.params.id],确保SQL语句正确执行
  • 新增“用户不存在”的判断逻辑,返回对应的错误提示
  • 统一模板文件名为profile.ejs,并正确传递foundUser.id作为渲染参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:20:08