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
相关产品推荐
相关产品推荐

