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

存在JSON对象但EJS模板无法渲染指定数据的问题

EJS模板渲染指定字段失败的解决方法

问题原因

你的路由代码中使用Recept.find()查询数据,这个方法返回的是匹配文档的数组,而非单个对象。因此传递给EJS模板的recept是数组类型,直接访问recept.title、recept.image这类属性自然无法获取到值,但渲染整个数组会输出完整的JSON字符串。

解决方案

有两种可行的修改方式:

方式一:改用findOne()查询单个文档

将查询方法替换为Recept.findOne(),它会直接返回匹配的单个文档对象,无需额外处理:

router.get("/:slug", function(req, res) {
  Recept.findOne({ slug: req.params.slug})
    .exec(function(err, foundRecept) {
      if(err || !foundRecept) {
        req.flash("error", "未找到食谱");
        res.redirect("back");
      } else {
        res.render("recepten/recept", { recept: foundRecept });
      }
    });
});

方式二:从数组中取出第一个元素传递给模板

如果需要保留find()方法,在渲染模板时取数组的第一个元素(因为slug通常是唯一的,数组只会有一个元素):

router.get("/:slug", function(req, res) {
  Recept.find({ slug: req.params.slug})
    .exec(function(err, foundRecept) {
      if(err || !foundRecept || foundRecept.length === 0) {
        req.flash("error", "未找到食谱");
        res.redirect("back");
      } else {
        // 取数组第一个元素传递
        res.render("recepten/recept", { recept: foundRecept[0] });
      }
    });
});

修改完成后,EJS模板中的<%= recept.title %>、<%= recept.image %>即可正常渲染对应字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:50:29