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

如何用JS和Node从MySQL获取指定笔记并渲染到前端模态框

解决笔记系统模态框加载指定笔记的问题

你的代码存在三个核心问题:前端未传递笔记ID给后端、后端未正确接收ID参数、未将响应数据渲染到模态框。以下是分步修复方案:

1. 前端修正:传递ID并渲染笔记内容

修改点击事件的Fetch逻辑,获取按钮绑定的笔记ID,请求后端获取完整笔记后渲染到模态框:

document.querySelectorAll('.noteViewModalBtn').forEach(item => {
  item.addEventListener('click', async event => {
    // 获取当前按钮对应的笔记ID
    const noteId = event.target.id;
    const modalContent = document.querySelector('.noteViewModalContent');
    try {
      // 通过URL参数传递笔记ID,发送GET请求
      const res = await fetch(`http://localhost:8080/note/${noteId}`);
      if (!res.ok) throw new Error('加载失败');
      // 解析后端返回的笔记数据(getNote返回数组,取第一个元素)
      const [note] = await res.json();
      // 将完整笔记渲染到模态框
      modalContent.innerHTML = `
        <h2>${note.title}</h2>
        <div class="full-note-body">${note.body}</div>
      `;
      // 显示模态框
      noteViewModal.style.display = "flex";
    } catch (err) {
      console.error(err);
      modalContent.innerHTML = '<p>无法加载该笔记,请稍后重试</p>';
      noteViewModal.style.display = "flex";
    }
  });
});

2. 后端路由修正:接收并使用ID参数

改用RESTful风格的URL接收笔记ID,同时添加错误处理逻辑:

// 通过URL参数`:id`接收笔记ID
app.get("/note/:id", checkNotAuthenticated, async(req, res) =>{  
  try {
    const noteId = req.params.id;
    const note = await getNote(noteId);
    // 处理笔记不存在的情况
    if (note.length === 0) {
      return res.status(404).json({ message: "笔记不存在" });
    }
    res.json(note);
  } catch (err) {
    console.error('获取笔记出错:', err);
    res.status(500).json({ message: "服务器内部错误" });
  }
});

3. EJS模板修正:规范按钮ID语法

给按钮的id属性添加引号,避免HTML语法错误:

<li>
  <p><%= note.body.substring(0, 250) %> <span class="noteViewModalBtn" id="<%= note.NoteId %>">...</span></p>
</li>

4. 可选:添加模态框关闭逻辑

如果还没实现关闭功能,补充以下代码:

// 关闭按钮点击事件(假设关闭按钮id为closeModal)
document.getElementById('closeModal').addEventListener('click', () => {
  noteViewModal.style.display = "none";
});
// 点击模态框外部关闭
window.addEventListener('click', e => {
  if (e.target === noteViewModal) {
    noteViewModal.style.display = "none";
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:05:14