解决SQLITE_ERROR: no such table: products及定制API返回JSON
问题分析与修复方案
1. POST请求报错原因
你在server.js的POST接口中尝试向products表插入数据,但SQLite数据库中实际创建的表是customer(在database.js的CREATE TABLE语句中定义),因此触发SQLITE_ERROR: no such table: products错误。而GET请求使用的是customer表,所以能正常返回结果。
2. 修复步骤及代码调整
2.1 修正POST接口的表名并调整返回格式
修改server.js中POST接口的SQL语句,将products替换为customer,同时调整返回结构为你需要的格式:
app.post("/api/products/", (req, res, next) => { try { var errors = []; if (!req.body) { errors.push("无效的输入内容"); return res.status(400).json({ "error": errors.join(", ") }); } const { customerName, address, email, dateOfBirth, gender, age, cardHolderName, cardNumber, expirytDate, cvv, timeStamp } = req.body; // 修正表名为customer var sql = 'INSERT INTO customer (customerName, address, email, dateOfBirth, gender, age, cardHolderName, cardNumber, expirytDate, cvv, timeStamp) VALUES (?,?,?,?,?,?,?,?,?,?,?)'; var params = [customerName, address, email, dateOfBirth, gender, age, cardHolderName, cardNumber, expirytDate, cvv, timeStamp]; db.run(sql, params, function (err, result) { if (err) { return res.status(400).json({ "error": err.message }); } // 调整为要求的返回格式 res.json({ "message": `customer ${customerName} has registered`, "customerId": this.lastID }); }); } catch (E) { res.status(400).json({ "error": E.message }); } });
2.2 补充输入验证逻辑
原代码中errors数组未实际生效,上述代码补充了验证失败时的错误返回逻辑,确保输入异常时能明确提示。
2.3 统一路由语义(可选)
当前路由/api/products/操作的是customer表,命名不一致易造成混淆,建议将路由改为/api/customers/,同时同步修改GET、PUT、DELETE接口的路由,保持语义一致。
3. 验证修复效果
修改后重启服务,用Postman发送POST请求,将返回如下格式的JSON:
{ "message": "customer A.D.Lakith Dharmasiri has registered", "customerId": 2 }
内容的提问来源于stack exchange,提问作者Redro
相关产品推荐
相关产品推荐

