【发布时间】: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()连接到数据库,然后在表games的winner_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' }