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

Node.js中如何通过res.send返回MySQL查询结果至EJS页面?

解决Node.js返回MySQL查询结果并在EJS页面正确渲染的问题

嘿,作为Node.js新手遇到这个问题很正常,我帮你梳理下代码里的几个关键问题,然后给出修正后的方案:

首先看你的代码里存在的几个小问题:

  1. AJAX请求的语法错误:你在data参数里写了$('#doct_id').val();,这里多了个分号,会直接导致JavaScript语法错误,请求根本发不出去。
  2. 路由错误处理缺失响应:数据库查询出错时,你只在控制台打印了错误,但没有给前端返回任何响应,前端会一直处于等待状态,最终超时。
  3. 前端直接渲染JSON数据的问题:res.send(rows)返回的是JSON数组,你直接用$('#msg_q').html(data)会把JSON对象转成字符串(比如显示[object Object]),没法正常展示内容。

修正后的完整代码

1. 路由代码(优化错误处理和响应格式)

router.post('/get_doc_msgs', (req, res) => {
  const queryStr = "SELECT * FROM msgs WHERE d_id = ?";
  const queryParams = [req.body.doc_id_msgs];
  
  db.query(queryStr, queryParams, (err, rows) => {
    if (err) {
      console.error('数据库查询错误:', err);
      // 返回500状态码+错误信息,让前端知道出问题了
      return res.status(500).json({ error: '加载消息失败,请稍后重试' });
    }
    // 用res.json()更规范地返回JSON格式数据,自动设置正确的响应头
    res.json(rows);
  });
});

2. EJS页面的AJAX函数(修复语法错误+正确渲染数据)

function getmsgs() {
  $.ajax({
    type: 'POST',
    url: '/get_doc_msgs',
    // 去掉val()后面的分号,修正语法错误
    data: { doc_id_msgs: $('#doct_id').val() },
    // 指定响应类型为JSON,避免自动转成字符串
    dataType: 'json',
    success: function(data) {
      const msgContainer = $('#msg_q');
      msgContainer.empty(); // 先清空容器
      
      if (data.length === 0) {
        msgContainer.html('<p class="no-msg">暂无任何消息</p>');
        return;
      }
      
      // 遍历每条消息,生成对应的HTML结构(根据你的表字段调整)
      data.forEach(msg => {
        const msgItem = `
          <div class="message-item">
            <h4>消息内容:${msg.content}</h4>
            <p class="time">发布时间:${new Date(msg.created_at).toLocaleString()}</p>
            <!-- 这里可以添加更多你的表字段内容 -->
          </div>
        `;
        msgContainer.append(msgItem);
      });
    },
    // 增加错误处理,捕获请求失败的情况
    error: function(xhr, status, error) {
      console.error('请求错误:', error);
      $('#msg_q').html('<p class="error-msg">加载消息失败,请检查网络或稍后重试</p>');
    }
  });
}

关键修改说明:

  • 用res.json()替代res.send():res.json()会自动设置Content-Type: application/json响应头,确保前端能正确识别为JSON数据,比res.send()更适合返回接口数据。
  • 完善错误响应:数据库出错时返回500状态码和友好提示,前端可以捕获并处理,避免用户一直等待。
  • 修复AJAX语法错误:去掉多余的分号,保证请求能正常发送。
  • 前端遍历渲染数据:不再直接把JSON字符串插入页面,而是遍历每条数据生成HTML结构,这样才能正常展示消息内容。
  • 增加前端错误处理:捕获网络错误、服务器错误等情况,给用户友好提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 23:02:44