LINUX.ORG.RU

Node.js, pg-promise и глобальный объект

 ,


0

1

Есть код, подключает pg-promise (postgres) и возвращает объект db
Будет ли работать кеширование require, если буду вызывать этот объект из другого кода или вынести в глобальный объект?
Под кешированием я подразумеваю такую фишку, что подключение будет выполняться только единожды, а потом уже просто выполнятся запросы

★★

Последнее исправление: mystery (всего исправлений: 1)

Будет ли работать кеширование require, если буду вызывать этот объект из другого кода

Да, будет, если принудительно не сбросишь.

или вынести в глобальный объект?

Данунах, быдлостиль же (если ты про global).

У меня обычно в require функции, которым пропихивается глобальный конфиг, а в него уже шпилится все что захочется. Шарить через require(sharedObj) мне почему-то не нравится, но метод рабочий.

Vit ★★★★★
()
Последнее исправление: Vit (всего исправлений: 1)
Ответ на: комментарий от Vit

Ну у меня сейчас global.db = require('./my-db-object')
Ок, переделаю
Просто постоянно писать require('./db') и не будет переисполняться код?

mystery ★★
() автор топика
Ответ на: комментарий от Vit

Да я ивент повесил, что бы конекшн логировался и после require постоянно сообщение вылезало
Буду ковырять код pg-promise
Спасибо!

mystery ★★
() автор топика
Последнее исправление: mystery (всего исправлений: 1)

ну так ты попробуй, подключи что нибудь через require а потом измени исходник и посмотри, применились ли изменения. Это как раз наоборот главная жопа ноды, что там не так то просто организовать живую правку кода, на лету. И не слушай всякх клоунов, явное указание global ни разу не является быдлостайлом, в ноде вообще работа с глобальнгым объектом наворочена и запутана без меры. Все зависит от кейза. Объявлять через var имеет смысл только именно тогда, когда ты не хочешь, чтобы он был в глобальной области. И в этом случае ты не сможешь удалить эту переменную.

xlsparse
()
Ответ на: комментарий от xlsparse

И так, и так работает, просто постоянные реконнекты к базе на каждый запрос - это сильная нагрузка
У меня в global обычно пути для модулей, что бы не писать require '../../../../somemodule' я пишу require lib + 'somemodule' или require `${lib}somemodule`

mystery ★★
() автор топика
Ответ на: комментарий от mystery

постоянные реконнекты к базе на каждый запрос - это сильная нагрузка

Ничего подобного, никакой нагрузки на самом деле. Плюс, в библиотеке встроеная поддержка исполнения запросов внутри одного выделенного соединения, через методы task и tx. см. также https://github.com/vitaly-t/pg-promise/wiki/chaining-queries

П.С. я автор библиотеки pg-promise

Vitaly-t
()
Ответ на: комментарий от Vitaly-t

Вау, круто
Спасибо большое! Ваша библиотека намного круче всяких ORM типа ActiveRecord
Как я понял, постоянные сообщения о коннекте к базе это не страшно? Я просто повесил console.log на event connection
P.S.: Как указать в connection string(url) что мне нужен SSL? И что порекомендуете для миграций?

mystery ★★
() автор топика
Ответ на: комментарий от mystery

Как я понял, постоянные сообщения о коннекте к базе это не страшно?

Нет, но как я уже говорил, при испольнении более чем одного запроса лучше использовать задачи task или транзакции tx.

Как указать в connection string(url) что мне нужен SSL?

https://github.com/vitaly-t/pg-promise/wiki/Connection-Syntax#connection-string

тут-же указано ;)

что порекомендуете для миграций?

много всяких решений есть, но ими не сам не занимался чтобы рекомендовать. смотрите сами... :)

https://github.com/db-migrate/node-db-migrate

https://github.com/theoephraim/node-pg-migrate

Vitaly-t
()
Ответ на: комментарий от Vitaly-t

Ой, что-то не увидел про ?ssl=false :-D
Сейчас у меня вместо миграций тупо create table if not exists :-)
Спасибо еще раз
И да, я при иниализации повесил event connection, где у меня console.log
И каждый раз по запросу из базы данных у меня новое сообщение в консоли
Может я не правильно понимаю смысл этого ивента?

mystery ★★
() автор топика
Ответ на: комментарий от Vitaly-t

Завершу тред вопросом - объявление global.db = require './db'
является быдлокодом или нет? Стоит ли мне во всем коде писать require '../../../db' или оставить как есть (т.е. global.db)?

mystery ★★
() автор топика

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

nikolnik ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.