在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上下文里没拿到这个变量,需额外检查:- EJS文件路径是否匹配:确认
views/campgrounds/index.ejs存在,控制器渲染的路径和文件位置完全对应。 - 路由是否正确指向该控制器方法:避免路由配置错误导致控制器没被执行。
- EJS文件路径是否匹配:确认
直接在EJS中输出变量验证
在index.ejs的HTML部分添加如下代码,验证EJS是否能读取到变量:<p><%= campgrounds %></p>如果页面显示
[object Object]或数组内容,说明变量已传递;如果显示空白或报错,需检查:- Campground模型是否正确引入(拼写、路径是否有误)
- 是否有中间件干扰了
res.render的变量传递
内容的提问来源于stack exchange,提问作者iconwontload
相关产品推荐
相关产品推荐

