输入值无法存入SQLite数据库问题排查请求
可能的原因及排查方向
SQLite3事务未提交
SQLite默认开启事务机制,若执行INSERT语句后未触发事务提交,数据仅存于内存不会写入磁盘。检查服务器插入逻辑,确保在db.run()中处理回调或显式提交:// 错误示例:无回调/提交逻辑 db.run('INSERT INTO users (username) VALUES (?)', ['test']); // 正确示例:通过回调确认执行结果 db.run('INSERT INTO users (username) VALUES (?)', ['test'], function(err) { if (err) console.error('插入失败:', err); });Glitch文件系统持久化问题
Glitch默认目录为临时存储,重启容器后数据会丢失;同时可能存在写入权限限制。需将数据库文件放在Glitch提供的持久化目录.data下:const db = new sqlite3.Database('.data/user.db');可通过Glitch终端执行
ls .data确认文件是否存在,查看控制台是否有EACCES权限报错。请求参数与SQL语句不匹配
前端发送的字段名与users表列名不一致,或参数为空,会导致插入无效数据或SQL执行失败。比如前端传{user: 'xxx'}但SQL用username列,需核对请求体字段与SQL列名,同时在服务器打印接收的参数:app.post('/add-user', (req, res) => { console.log('接收参数:', req.body); // 确认参数是否正确 // ...插入逻辑 });CORS配置或请求头问题
即使请求显示发送,可能因CORS配置不全导致服务器未正确处理POST请求。检查Express的CORS中间件是否允许前端本地地址、POST方法及正确的请求头:app.use(cors({ origin: 'http://localhost:8080', // 替换为你的前端本地地址 methods: ['POST'], allowedHeaders: ['Content-Type'] }));同时确认前端请求是否设置
Content-Type: application/json,否则服务器无法解析请求体。用户表结构不匹配
若users表缺少前端传递的字段,SQL插入会报错。在Glitch终端执行以下命令检查表结构:sqlite3 .data/user.db PRAGMA table_info(users);确认表中列名、数据类型与前端参数匹配。
服务器错误未捕获
插入逻辑未捕获错误会导致失败无提示,需在代码中添加错误捕获,查看Glitch日志面板的报错信息:db.run('INSERT INTO users (username) VALUES (?)', ['test'], function(err) { if (err) { console.error('SQL执行错误:', err); res.status(500).send('插入失败'); } else { res.send('插入成功'); } });
内容的提问来源于stack exchange,提问作者user24731705
相关产品推荐
相关产品推荐

