Node Express - 数据库创建得太晚导致错误
Node Express - Database is created too late causing error
我的问题是创建数据库。它创建得太晚,会导致进一步查询出现问题。我尝试使用 async 和 await,但似乎并没有解决问题。
async function storeDailyDealToDB(dailyDeal) {
const db = new sqlite3.Database('database.db');
await new Promise((resolve) => {
const QUERY_CREATE_TABLE =
"CREATE TABLE IF NOT EXISTS daily_deal ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT,)";
db.run(QUERY_CREATE_TABLE);
resolve("done")
});
await new Promise((resolve) => {
const insert =
"INSERT INTO daily_deal (title) VALUES (?)";
const stmt = db.prepare(insert);
stmt.run([dailyDeal['title']]);
stmt.finalize();
resolve("done")
});
let lastRow = await new Promise((resolve) => {
db.each("SELECT * FROM daily_deal ORDER BY id DESC LIMIT 1", function (err, row) {
resolve(err == null ? {} : row)
});
});
db.close();
return lastRow
}
这是我得到的错误:
[Error: SQLITE_ERROR: no such table: daily_deal
Emitted 'error' event on Statement instance at:
] {
errno: 1,
code: 'SQLITE_ERROR'
}
Node.js v17.9.0
我做了很多研究,但还是卡住了。我读到使用 Promise
但它部分起作用。我不确定如何解决这个问题。
查看 Database#run 的参考文档后,您应该将回调传递给 运行 方法。在此回调中,您希望根据结果解决或拒绝承诺。
await Promise((res, rej) => {
db.run(..., (err, result) => {
if (err) rej(err) else res(result)
});
});
我认为这是正确的(但是未经测试)。
我的问题是创建数据库。它创建得太晚,会导致进一步查询出现问题。我尝试使用 async 和 await,但似乎并没有解决问题。
async function storeDailyDealToDB(dailyDeal) {
const db = new sqlite3.Database('database.db');
await new Promise((resolve) => {
const QUERY_CREATE_TABLE =
"CREATE TABLE IF NOT EXISTS daily_deal ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT,)";
db.run(QUERY_CREATE_TABLE);
resolve("done")
});
await new Promise((resolve) => {
const insert =
"INSERT INTO daily_deal (title) VALUES (?)";
const stmt = db.prepare(insert);
stmt.run([dailyDeal['title']]);
stmt.finalize();
resolve("done")
});
let lastRow = await new Promise((resolve) => {
db.each("SELECT * FROM daily_deal ORDER BY id DESC LIMIT 1", function (err, row) {
resolve(err == null ? {} : row)
});
});
db.close();
return lastRow
}
这是我得到的错误:
[Error: SQLITE_ERROR: no such table: daily_deal
Emitted 'error' event on Statement instance at:
] {
errno: 1,
code: 'SQLITE_ERROR'
}
Node.js v17.9.0
我做了很多研究,但还是卡住了。我读到使用 Promise
但它部分起作用。我不确定如何解决这个问题。
查看 Database#run 的参考文档后,您应该将回调传递给 运行 方法。在此回调中,您希望根据结果解决或拒绝承诺。
await Promise((res, rej) => {
db.run(..., (err, result) => {
if (err) rej(err) else res(result)
});
});
我认为这是正确的(但是未经测试)。