Здравствуйте. Написал довольно простой бэк на рест-апи с монго, каждый запрос у меня исходит из трубы после валидации данных, вот пример:
get_events_pipe.js
export default function eventsPipe(req, res, eventSchema, validator, db) {
db.query('events')
.then(async collection => {
const {client, find} = db;
const id = +req.body.id;
const events = validator({id}, eventSchema.getEvents);
if(events) {
await find(collection, {userID: id}).then(data => {
if(data.length) {
return data
}
throw 'Events not found';
}).then(events => {
res.send({events});
return events
}).then(() => client.close()).catch(() => { // После завершения я вызываю закрытие соединения
res.send({events:[]});
}).finally(console.log);
} else {
console.error('Empty property in object user');
}
})
.catch(console.error);
}
get_events_endpoint
import mongo_db from './mongo_db/config.js';
const {query, client} = mongo_db;
app.post('/getEvents', (req, res) => eventsPipe(
req,
res,
eventSchema,
validator,
{query, client, find}
));
Мой монго конфиг выглядит следующим образом:
db_config.js
import {MongoClient} from "mongodb";
const url = 'myMongoURL';
const client = new MongoClient(url);
const dbName = 'map';
export default {
query: async function (collectionName) {
await client.connect();
const db = client.db(dbName);
return db.collection(collectionName);
},
client: client
}
Я получаю эту ошибку рандомно, допустим 3 запроса проходи - 1 нет:
MongoExpiredSessionError: Cannot use a session that has ended
Первый запрос в гугле:
https://stackoverflow.com/questions/59816298/how-t...
Здесь предлагают счётчик или асинхронность, счётчик выглядит как костыль, а асинхронность я и так использую.
Скажите пожалуйста, что я могу сделать в данной ситуации?
Спасибо.