You need to enable JavaScript to run this app. SQLite数据库无报错但数据无法写入保存问题求助
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 21:15:00