【发布时间】:2020-09-16 13:02:08
【问题描述】:
我在使用 Mongo 时遇到问题,请考虑:
const mongoose = require('mongoose');
const CONFIG = {
host: "localhost",
port: 27017,
db: "dev"
};
const url = `mongodb://${CONFIG.host}:${CONFIG.port}/${CONFIG.db}`;
const options = {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true
};
const checkMongoConnection = async () => {
return new Promise(async (resolve, reject) => {
if (mongoose.connection.readyState === 1) {
return resolve();
}
try {
await mongoose.connect(url, options);
return resolve();
} catch(error) {
console.log(error);
reject(error);
}
});
};
const disconnectMongo = async () => {
return new Promise(async (resolve, reject) => {
try {
await mongoose.disconnect();
return resolve();
} catch(error) {
console.log(error);
reject(error);
}
});
};
module.exports = {
checkMongoConnection,
disconnectMongo
}
而我的数据库查询是这样的:
const User = require('./app/Models/User');
const { checkMongoConnection, disconnectMongo } = require(
'./app/util/mongo-connection-util'
);
const task1 = async () => {
try {
await checkMongoConnection();
const user = await User
.findOne()
console.log(user._id);
await disconnectMongo();
} catch(error) {
console.log(error);
}
};
task1()
task1()
问题是,如果我使用task1 调用对数据库进行查询,然后立即再次查询,我会收到错误 Cannot use a session that has ended。如果我只是在没有问题的情况下调用该函数。
我知道这是因为连接已经在使用中,如果我使用await 并以串行方式执行功能,等待第一个完成后再执行下一个,代码将起作用。
但是我想在一组 API 调用之后进行数据库调用,所以它会在不同的时间异步。是否有可能实现这一点,还是所有数据库调用都必须一个接一个?
【问题讨论】:
标签: javascript node.js mongodb mongoose