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
相关产品推荐
相关产品推荐

