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

Node.js操作SQLite3编辑articles表数据的问题求助

问题分析与解决方案

你的代码存在三个核心问题,导致文章ID无法正确获取或更新失败:

1. GET路由未传递文章ID与数据到模板

当前GET路由仅渲染页面,既没有查询对应ID的文章数据,也未将ID传递给EJS模板,导致编辑页面无法填充原有内容,也没法在表单提交时带上目标ID。

修正后的GET路由代码:

router.get("/author-edit/:id", (req, res, next) => {
  const id = req.params.id;
  const sqlQuery = `SELECT * FROM articles WHERE article_id = ?`;
  global.db.get(sqlQuery, [id], (err, article) => {
    if (err) {
      next(err);
    } else {
      // 将文章数据和ID传递给模板
      res.render("author-edit", { article, id });
    }
  });
});

2. 表单Action未包含文章ID

原表单的action="author-edit"是相对路径且未携带文章ID,导致POST请求无法匹配到带:id的路由,req.params.id自然为空。

修正后的EJS表单代码:

<div class="container">
  <!-- 把ID拼接到action路径,确保POST请求携带目标ID -->
  <form action="/author-edit/<%= id %>" method="post">
    <div class="mb-3">
      <div id="articleDesc" class="form-text">Update your Article Below</div>
      <br>
      <label for="article-title" class="form-label">Article Title</label>
      <!-- 填充原有文章标题 -->
      <input type="text" class="form-control" name="article_title" aria-describedby="articleDesc" value="<%= article.article_title %>">
    </div>
    <div class="mb-3">
      <label for="article-subtitle" class="form-label">Article Subtitle</label>
      <!-- 填充原有文章副标题 -->
      <input type="text" class="form-control" name="article_subtitle" value="<%= article.article_subtitle %>">
    </div>
    <div class="mb-3">
      <label for="article-body" class="form-label">Article Body</label>
      <!-- 填充原有文章内容 -->
      <textarea class="form-control" name="article_body"><%= article.article_body %></textarea>
    </div>
    <button type="submit" class="btn btn-primary">Update Article</button>
  </form>
</div>

3. UPDATE语句存在语法错误

原SQL语句重复使用了SET关键字,且字段名大小写混写(ARTICLE_subtitle),这会导致SQLite执行失败。

修正后的POST路由代码:

router.post("/author-edit/:id", (req, res, next) => {
  let id = req.params.id;
  let update_data = [req.body.article_title, req.body.article_subtitle, req.body.article_body, id];
  // 修正SQL语法:SET只写一次,字段名保持统一大小写
  let sqlQuery = `UPDATE articles SET article_title = ?, article_subtitle = ?, article_body = ? WHERE article_id = ?`;
  global.db.run(sqlQuery, update_data, function (err) {
    if (err) {
      next(err);
    } else {
      // 使用绝对路径重定向,避免相对路径问题
      res.redirect("/author/author-homepage");
    }
  });
});

按上述步骤修改后,就能正确获取文章ID并完成数据库更新操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:08:30