SQLite数据库无报错但数据无法写入保存问题求助
问题排查与解决方案
核心问题1:存储路径配置错误
- Glitch平台仅
.data隐藏目录支持持久化存储,你修改到根目录的/data.sqlite.db属于临时文件系统,项目重启后会被自动清空,完全不适合存数据库。 - 你代码里当前写的路径是
const dbFile = "./data/sqlite.db";,和你说修改的/data.sqlite.db不一致,相当于路径修改完全没有生效。 - 额外注意:如果是少打了点的普通
data目录而非隐藏的.data目录,也不属于Glitch的持久化范围,同样会丢失数据。
修复方法
首先初始化目录,再修正数据库路径:
// 先确保持久化目录存在 if (!fs.existsSync('./.data')) { fs.mkdirSync('./.data'); } const dbFile = "./.data/sqlite.db";
核心问题2:写入操作被环境变量拦截
你代码中所有写入接口(新增、清空)都加了 if (!process.env.DISALLOW_WRITE) 判断,只要.env文件里配置了这个变量,写入逻辑会直接跳过,不会执行数据库操作,自然不会报错也不会存数据。
修复方法
打开Glitch项目侧边栏的「.env」标签,删除 DISALLOW_WRITE 相关配置项,或者将值改为 false。
核心问题3:缺少请求体解析中间件
你贴出的代码里没有配置Express的请求体解析中间件,POST请求发送的表单/JSON数据无法被解析,request.body.dream 会返回 undefined,就算执行插入也不会写入有效内容。
修复方法
在静态资源中间件后添加解析规则:
app.use(express.static("public")); // 新增以下两行 app.use(express.json()); app.use(express.urlencoded({ extended: true }));
可选:补充错误日志便于排查
在所有数据库操作的回调中补充错误打印,就能直观看到具体报错原因:
比如addDream接口修改为:
db.run(`INSERT INTO Dreams (dream) VALUES (?)`, cleansedDream, error => { if (error) { console.log('写入错误:', error); // 新增错误日志 response.send({ message: "error!" }); } else { response.send({ message: cleansedDream+"success" }); } });
内容的提问来源于stack exchange,提问作者Smoob
相关产品推荐
相关产品推荐

