You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

输入值无法存入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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:39:57