@historydev
Редактирую файлы с непонятными расширениями

Как закрыть соединение mongodb, при использовании одного клиента в множестве end-поинтов?

Здравствуйте. Написал довольно простой бэк на рест-апи с монго, каждый запрос у меня исходит из трубы после валидации данных, вот пример:

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...
Здесь предлагают счётчик или асинхронность, счётчик выглядит как костыль, а асинхронность я и так использую.

Скажите пожалуйста, что я могу сделать в данной ситуации?

Спасибо.
  • Вопрос задан
  • 168 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы