是否可以在 node.js 中有条件地运行 sqlite 查询?



我正在使用节点v14.2和sqlite3:https://github.com/mapbox/node-sqlite3

我正在尝试确定表是否存在,如果存在,请对其进行查询。我试过:

data = []
db.run("SELECT name FROM sqlite_master WHERE type='table' AND name='mytable';", result => {
console.log(result)
if (result) {
db.each("SELECT * FROM mytable;", (err, row) => {
data.push(row)
})
}
})
console.log(data)

但是,即使表mytable存在,我的数组data也不会被推送到。我还尝试使用PRAGMA table_info('mytable');测试表是否存在。确认mytable存在后,如何添加到data

我在您的代码中看到的问题是,控制台.log在回调函数之外。

data = []
db.all("SELECT name FROM sqlite_master WHERE type='table' AND name='mytable';", function(err, rows) {
rows.forEach(function (row) {
data.push(row)
});
console.log(data)
});

在JS中你需要了解的是,回调是异步的,可能会在下一行被执行后被调用。在您的情况下,控制台.log很可能在回调完成之前就被执行了。

更新:刚刚意识到运行函数不返回任何内容。

我想出了问题所在。db.run()的第二个参数result,如果查询成功,则为空,如果查询不成功,则为错误。因此,如果result,我应该出错,而不是相反。这是工作代码:

data = []
db.run("SELECT name FROM sqlite_master WHERE type='table' AND name='mytable';", result => {
if (result) {
console.error(result)
} else {
db.each("SELECT * FROM mytable;", (err, row) => {
data.push(row)
})
}
console.log(data)
})

最新更新