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

在EJS文件script标签中使用EJS标签报错:campgrounds未定义求助

解决EJS中campgrounds未定义的问题

排查步骤及解决方案

  • 先验证控制器变量传递是否正常
    在控制器的index方法里添加日志,确认查询到数据且变量已准备好:

    module.exports.index = async (req, res) => { 
      const campgrounds = await Campground.find({});
      console.log(campgrounds); // 查看终端是否输出数据(空数组也算正常)
      res.render('campgrounds/index', { campgrounds }); 
    }
    

    如果终端能输出数据,说明变量传递的前置环节没问题,问题出在EJS渲染。

  • 使用正确的EJS语法给JS变量赋值
    你最初的写法本身是正确的,不需要给<%- JSON.stringify(campgrounds) %>加单引号——JSON.stringify会把对象/数组转换成合法的JavaScript字面量,直接赋值即可:

    <script>
      const campgrounds = <%- JSON.stringify(campgrounds) %>;
      console.log(campgrounds); // 此时应正常输出数据
    </script>
    

    加单引号会把JSON字符串变成普通字符串变量,后续操作才会报错,但你遇到的是campgrounds未定义,说明EJS上下文里没拿到这个变量,需额外检查:

    1. EJS文件路径是否匹配:确认views/campgrounds/index.ejs存在,控制器渲染的路径和文件位置完全对应。
    2. 路由是否正确指向该控制器方法:避免路由配置错误导致控制器没被执行。
  • 直接在EJS中输出变量验证
    在index.ejs的HTML部分添加如下代码,验证EJS是否能读取到变量:

    <p><%= campgrounds %></p>
    

    如果页面显示[object Object]或数组内容,说明变量已传递;如果显示空白或报错,需检查:

    • Campground模型是否正确引入(拼写、路径是否有误)
    • 是否有中间件干扰了res.render的变量传递

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:50:28