170 похожих чатов

Привет! Подскажите, как на экспрессе по мвс делать запрос в

модели к базе данных, если ее подключение и функция лежат в отдельном модуле? При импорте функции и нескольких запросах (либо паре неверных запросах) пишет что сокет закрыт с другой стороны (socket has been ended by other party)

12 ответов

18 просмотров

1. Подключение к БД вынести в фазу инициализации приложения 2. НЕ открывать .listen в HTTP сервисе до выполнения п. 1 3. Предоставить в MVC уже готовый проинициализированный интерфейс для выполнения запросов, а не тот интерфейс, который выполнит подключение 4. Использовать Connection Pool, чтобы держать необходимое количество резервных соединений с БД. Обычно это опция конфигурации подключения или самой библиотеки, которая используется для вашей БД 5. Наверняка в документации к библиотеке или ORM для используемой БД есть что-нибудь вроде Keep Alive для соединений, обычно есть Active Record и Data Mapper это всего лишь паттерны. Модель сама не делает запрос к БД, ей нужен интерфейс нижележащего уровня, т.е. п. 1. Попробуйте разобраться с зависимостями уровней и очерёдностью фаз и может быть тогда можно будет не смешивать фазы жизненного цикла данных с фазами жизненного цикла приложения и оно само собой решится )

Alexandr-Sachyshyn Автор вопроса

Я подключаю бд в отдельном файле в конфиге, а .listen - в самом конце файла, который запускаю. Есть корневой класс модели, где есть основные методы, которые я вызываю в соответствующем контроллере, а его у свою очередь вызываю в роуте. Может, я что-то не так делаю, но во всех примерах всю логику пишут прямо в корневом файле. Извиняюсь, я новичок

не за что извиняться, все были новичками просто из вашего описания создаётся ощущение, что вы вызываете .connect к БД в контроллере Какая БД у вас и что для неё используете из NPM?

Alexandr-Sachyshyn Автор вопроса

Express mysql2. Я с утра покажу пример, если Вам не трудно посмотреть

no problem

Alexandr-Sachyshyn Автор вопроса

доброе утро! в отдельном файле конфига я храню информацию о бд и делаю коннект с mysql на этим данным. после обновления ноды до 14 версии у меня пишет require is not defined, потому все на импортах

Alexandr-Sachyshyn Автор вопроса

в модели сделал класс с общими методами, где выполняю запрос. от него сделал наследование к соответствующим моделям, чтобы дополнять их по мере необходимости

на строке 9 return не нужен передавать объекты req и res непосредственно в интерфейс запросов к БД бесчеловечно, даже если никто не будет читать этот код — это бесчеловечно по отношению к себе в первую очередь ) делать, конечно, можно что угодно, но это "против природы", потому, что здесь две доменные области в одном методе — ответ на HTTP запрос совмещён с запросом в БД. То есть dbQuery должен принимать данные, и возвращать их же.

так тоже Sub Optimal можно делать как угодно, конечно, но я бы почитал: https://sequelize.org/master/manual/getting-started.html То есть решение смешать обработку HTTP запросов в том же месте где идёт работа с данными в Persisten Storage приведёт к массе проблем в будущем. Разделите их по разным интерфейсам и тогда все эти сложные связи уйдут.

Alexandr-Sachyshyn Автор вопроса

по-другому я не знаю как сделать, чтобы работало вне server.js) изначально я хотел делать запрос и возвращать ответ, в функцию, а уже его возвращать на фронтенд, но не получалось

нужно смотреть почему именно не получилось есть прекрасный Guide как именно смотреть, так, чтобы не было больно: https://nodejs.org/en/docs/guides/debugging-getting-started/

Alexandr-Sachyshyn Автор вопроса

я пересмотрел кучу видео и перечитал кучу статей, все как 1 пишут все прямо в server.js. я хотел разделить эту логику, пытаюсь сделать подобие mvc, чтобы логика была в модели, а контроллер просто дергал нужный метод по надобности. и как тогда поступить лучше, чтобы не импортировать везде и всюду dbQuery? к тому же нужно ли завершать соединение в конце? если я его завершаю, запрос обрывается и пишет что соединение закрыто. если я на фронте буду быстро обновлять данные, то выскочит ошибка что сокет закрыт. боль :)

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта