Node.js传数据至EJS表格报错:bodyData未定义问题求助
EJS表格渲染报错:"Reference error: bodyData is not defined"
我的HTML页面包含两段EJS代码,分别用于下拉菜单和数据表格渲染,二者均从Node.js后端获取数据。目前下拉菜单功能正常,但表格无法正常渲染,报错信息为Reference error: bodyData is not defined at eval。已尝试更换变量名称、反复核对代码细节,问题仍未解决。相关代码如下:
Node.js后端代码
case "ucgw2": axios.get(apiurl+"/api/cdr-ucgw2",{ data: {starttime:starttime, endtime:endtime, setlimit:setlimit, customer:customer} }) .then(function (body) { // handle success console.log("channel data = ",body.data) res.render('html-cdr',{bodyData:body.data, startday:startday, startmonth:startmonth, startyear:startyear, starthour:starthour, startmin:startmin, endday:endday, endmonth:endmonth, endyear:endyear,endhour:endhour, endmin:endmin, customer:customer}); }) .catch(function (error) { // handle error req.flash('error', error); res.render('html-cdr',{bodyData:body.data, startday:startday, startmonth:startmonth, startyear:startyear, starthour:starthour, startmin:startmin, endday:endday, endmonth:endmonth, endyear:endyear,endhour:endhour, endmin:endmin, customer:customer}); })
EJS表格代码
<% if(bodyData !== "" && bodyData !== null){ var i=1; bodyData.forEach(function(body){ %> <tr> <td><%=body.company_name %></td> </tr> <% i++; }) %> <% } else{ %> <% } %>
问题分析与修复方案
核心问题
- catch分支变量错误:请求失败进入
catch时,回调参数是error而非body,此时body.data根本不存在,会导致传递给EJS的bodyData为undefined,触发渲染报错。 - EJS判断逻辑不严谨:仅判断了空字符串和
null,未处理bodyData为undefined的情况,直接调用forEach会报错。
修复步骤
1. 修正Node.js后端catch分支
请求失败时传递空数组作为bodyData的兜底值,避免传递undefined:
case "ucgw2": axios.get(apiurl+"/api/cdr-ucgw2",{ data: {starttime:starttime, endtime:endtime, setlimit:setlimit, customer:customer} }) .then(function (body) { console.log("channel data = ",body.data) res.render('html-cdr',{ bodyData: body.data || [], // 确保数据为空时传递空数组 startday:startday, startmonth:startmonth, startyear:startyear, starthour:starthour, startmin:startmin, endday:endday, endmonth:endmonth, endyear:endyear, endhour:endhour, endmin:endmin, customer:customer }); }) .catch(function (error) { req.flash('error', error); res.render('html-cdr',{ bodyData: [], // 请求失败时传递空数组 startday:startday, startmonth:startmonth, startyear:startyear, starthour:starthour, startmin:startmin, endday:endday, endmonth:endmonth, endyear:endyear, endhour:endhour, endmin:endmin, customer:customer }); })
2. 优化EJS判断逻辑
增加对undefined的判断,同时简化代码:
<% if (bodyData && bodyData.length > 0) { %> <% let i = 1; %> <% bodyData.forEach(function(body) { %> <tr> <td><%= body.company_name %></td> </tr> <% i++; %> <% }) %> <% } %>
额外提示
- 后端传递
bodyData时始终兜底为数组,避免出现null或undefined的情况 - 若环境支持ES6+语法,可使用可选链进一步简化判断:
<% if (bodyData?.length) { %>
内容的提问来源于stack exchange,提问作者CurlyBoi
相关产品推荐
相关产品推荐

