mongoose在不同的路线上正确启动交易
在我的Node.js express应用程序中,我尝试通过mongoose进行交易。我成功连接到MongoDB,并尝试通过我的应用程序中的另一条路径基于该连接启动事务。但不知怎的,我无法通过访问数据库实例
const db = mongoose.connection.db; // undefined
const session = db.startSession() // Err : cannot read porperty startSession of undefined
session.startTransaction();
我读到的某个地方使用连接作为数据库实例,我检索一个会话,但没有在其上调用startTransaction的方法
const session = mongoose.connection.startSession(); // works
session.startTransaction(); // Err : session.startTransaction is not a function
任何人都可以向我解释如何在mongoose上正确启动交易吗?
提前致谢
MongoDB版本:4.1.x mongoose版本:5.4.X
回答如下:这不是关于启动事务,而是与构建模块的方式有关。我建议您将数据库连接模块创建为一个脚本,然后从那里导出“db”,您可以在其中保存/更新对数据库的引用。这样的事情(琐碎的例子):
// db module
const state = {
db: null
};
function connect() {
state.db = mongoose.createConnection(process.env.NODE_URL);
}
function getConnection() {
return Promise.resolve(state.db);
}
module.exports = {
connect,
getConnection,
}
然后在你的模块中,懒洋洋地得到这个:
let getConnection = require('./db'); // or wherever it is
module.exports = function(params, opts) {
return getConnection()
.then(db => db.startSession())
.then(session => session.startTransaction(/* ... */))
// ..
}
该模块是人为设计的,但它可能会帮助您实现目标。