使用MongoDB find()获取指定用户头像URL却返回所有用户数据的问题
问题解决:获取指定用户的头像路径
你的核心问题是路由查询了所有用户的头像数据,导致EJS模板拿到的是数组而不是单个用户的路径。以下是具体修改方案:
1. 修改路由查询逻辑
你当前用的User.find({}, "profilePicture")会返回数据库中所有用户的profilePicture字段数组,必须改成查询单个指定用户的逻辑:
情况1:路由参数:user是用户名
router.get("/:user/profile-picture", (req, res, next) => { // 从路由参数中获取目标用户名 const targetUsername = req.params.user; // 仅查询匹配用户名的用户,只返回profilePicture字段 User.findOne({ username: targetUsername }, "profilePicture") .exec(function (err, user) { if (err) return next(err); // 处理用户不存在的情况 if (!user) return res.status(404).send("用户不存在"); // 将单个用户的头像路径传给模板 res.render("picture", { profilePicture: user.profilePicture }); }); });
情况2:路由参数:user是用户ID
router.get("/:user/profile-picture", (req, res, next) => { const userId = req.params.user; // 通过用户ID查询,只返回profilePicture字段 User.findById(userId, "profilePicture") .exec(function (err, user) { if (err) return next(err); if (!user) return res.status(404).send("用户不存在"); res.render("picture", { profilePicture: user.profilePicture }); }); });
2. 修正前端图片路径(可选但重要)
数据库中存储的路径包含public\\,但Express通常会把public设为静态资源目录(通过app.use(express.static('public'))配置),前端访问时不需要带上public,所以调整EJS中的图片路径:
<div class="avatar"> <img src="/images/uploads/<%= profilePicture %>.jpg" alt="用户头像" /> </div>
这样修改后,模板就能拿到单个用户的头像路径,图片就能正常显示了。
内容的提问来源于stack exchange,提问作者Dagger
相关产品推荐
相关产品推荐

