NodeJs如何导出SQLite连接



我正在运行一个express应用程序,在开始监听端口之前,我想在其中初始化/打开一个DB连接。

server.js:

const express = require('express');
const morgan = require('morgan');
const db = require('./database/dbUtils');
db.init();
const app = express();
...
app.listen(PORT, () => console.log(`Server running on port ${PORT}.`));

然后,我的想法是,我可以在我的模型中使用该连接来执行CRUD操作。例如,我有一个可以创建用户的用户模型。

user.js:

const db = require('./database/dbUtils');
async function createUser(user) {
await db.exec("INSERT INTO users ...");
}

如何导出连接我知道导出是同步的,所以不可能直接导出数据库。如何以常规方式(承诺和/或回调(做到这一点?

dbUtils.js:

const sqlite = require('sqlite3');
const sql = require('sqlite');
async function init() {
try {
return await sql.open({
filename: './database/database.db',
driver: sqlite.Database 
});    
} catch (e) {
console.error(e);
}
}
module.exports = init();

注意,在这种情况下,dbUtils.js将无法工作,因为它正在导出异步。即使它有效,每次导入时都会创建一个新的连接。

注意,在这种情况下,dbUtils.js将无法工作,因为它正在导出异步。即使它有效,每次导入时都会创建一个新的连接。

不应该是。

您正在导出调用这个异步函数的结果,它将成为Promise。init()只被调用一次。虽然在任何使用它的地方(或使用.then()(都需要awaitthis,但一旦Promise被解析,未来的.thenawait将立即解析为相同的值。

在您的其他文件中。。。。

const dbPromise = require('./database/dbUtils');
async function createUser(user) {
const db = await dbPromise;
await db.exec(...);
}

最新更新