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

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{ %>
<% } %>

问题分析与修复方案

核心问题

  1. catch分支变量错误:请求失败进入catch时,回调参数是error而非body,此时body.data根本不存在,会导致传递给EJS的bodyData为undefined,触发渲染报错。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:15:35