【问题标题】:Node.js failed to load resourceNode.js 加载资源失败
【发布时间】:2020-05-26 00:17:56
【问题描述】:

我一直在使用带有 sqlite3 数据库的 node.js。下面是我从数据库中获取数据的端点之一。

app.get('/newGame', async (req, res) => {
  try {
    let name = req.query.name;
    let size = req.query.size;

    let db = await getDBConnection();
    let insertGameQry = 'INSERT INTO games (winner_id) VALUES (null);';
    let insertGameResult = await db.run(insertGameQry);
    let gameId = insertGameResult.lastID;
    res.json({'game_id': gameId});
  } catch (err) {
    res.type('text');
    res.status(SERVER_ERROR).send(SERVER_ERROR_MSG);
  }
}

我首先从请求中获取两个查询参数,并通过getDBConnection()连接到数据库,然后在表gameswinner_id中插入一个空值(因为仍然没有赢家),因此在同一个表中获取gameId,使用lastID 自动递增。但是,当我单击客户端的相应按钮时,我经常收到服务器 500 错误。我已包含所有依赖项并确认具有正确的项目结构和.db 文件。有什么办法可以找出问题所在?我还尝试console.log google DevTool 中的查询参数,它工作正常。但是,当我 console.log gameId 时,它不会在控制台上打印任何内容。谁能提供调试方法?

【问题讨论】:

  • 你应该在你的 catch 方法中打印err,这样你就会知道发生了什么。如果您想查看错误发生的位置,我建议您删除 try ... catch 子句。 (仅用于调试目的)。修复错误后,您可以将其放回原处。
  • winner_id 可以为空吗?如果不是,那么插入空值肯定会导致问题。就像@Danizavtz 说的那样,打印err 肯定会有助于清除这一点。
  • 打印错误的意思是“console.log(err)”,对吧?
  • 打印的错误是:[Error: SQLITE_BUSY: database is locked] { errno: 5, code: 'SQLITE_BUSY' }

标签: sql node.js sqlite


【解决方案1】:

检查您的 sqlite3 数据库架构以查看 winner_id 是否设置了 NOT NULL

【讨论】:

  • 它没有设置 NOT NULL。实际上我第一次解决了这个问题,因为我忽略了数据库文件周围的引用。然后我编辑了我的一些代码并删除了它们,问题又出现了,这很奇怪。
猜你喜欢
  • 2019-02-26
  • 1970-01-01
  • 2012-07-24
  • 2018-01-15
  • 2013-02-26
  • 2019-05-28
  • 2016-06-24
  • 2016-07-01
  • 2011-06-21
相关资源
最近更新 更多