Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2020 March 29

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
я вот думаю - если бы там внутри трансформаций нужно было логировать, то логирование - это уже сайд эффект и нужно бы было как-то логгер всем передавать (по цепочке) ну или инжектить. Тогда да, пришлось бы делать не функции а каждый обработчик классом принимающим свои зависимости new Transformer(logger)
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Elena Sharovar
я вот думаю - если бы там внутри трансформаций нужно было логировать, то логирование - это уже сайд эффект и нужно бы было как-то логгер всем передавать (по цепочке) ну или инжектить. Тогда да, пришлось бы делать не функции а каждый обработчик классом принимающим свои зависимости new Transformer(logger)
в общем, это не чистые фцнкции, где есть ссылки на объекты, ни разу ни ни как
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
чтобы функции были чистыми, нужно использовать только примитивные значения, не ссылочные или клонировать объекты при передаче
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
т.е. склонировал обект дипклоном и передал его в функцию и сам ссылку забыл
источник

IK

Igor Kazmin in NodeUA - JavaScript and Node.js in Ukraine
если функционал не предполагает замены одного модуля на другой в ближайшие n месяцев, не вижу в этом смысла.
Когда в процессе разработки/поддержки замечаешь что один модуль часто меняется на другой - уже стоит смотреть насколько это болезненно происходит, если все были построено на интерфейсах и происходит безболезненно и с небольшими временными затратами, то тянуть DI, излишество. Если такие изменения вызывают боль - то DI - является инструментом, который заставить писать по интерфейсу. Для себя вижу это больше как обучающий патер работы с интерфейсами или же это большой enterprise проект, где один модуль используется много где - и что бы не использовать замены - где можно допустить ошибку он тоже подойдет.

Это на вскидку, но вообще должен быть здравый смысл)
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
Timur Shemsedinov
т.е. склонировал обект дипклоном и передал его в функцию и сам ссылку забыл
это cогласна, immutable все возвращать
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Elena Sharovar
я вот думаю - если бы там внутри трансформаций нужно было логировать, то логирование - это уже сайд эффект и нужно бы было как-то логгер всем передавать (по цепочке) ну или инжектить. Тогда да, пришлось бы делать не функции а каждый обработчик классом принимающим свои зависимости new Transformer(logger)
логи, даже если они не имеют влияния на данные, влияют на асинхронность и на cpu
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
т.е. добавление такого логера может, например, приводить к тому, что неявный и редкий race condition становится очень частым
источник

AK

Alexander Kabolov in NodeUA - JavaScript and Node.js in Ukraine
Привет всем, подскажите как мне остановить process.stdin если он в пайплайне?
pipeline(
   process.stdin,
   Transform,
   fs.createWriteStream(output, { flags: 'a' }),
   err => {
     if (err) {
       console.error('Something got wrong.', err);
     } else {
       process.stdout.write(`Your encoded file here ${__dirname}/${output}\n`);
     }
   }
 );
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
Похоже вам нужно не stdin остановить а сделать backpressure в следующих стримах чтобы они притормаживали stdin когда не справляются
источник

AK

Alexander Kabolov in NodeUA - JavaScript and Node.js in Ukraine
Elena Sharovar
Похоже вам нужно не stdin остановить а сделать backpressure в следующих стримах чтобы они притормаживали stdin когда не справляются
Не на столько глубоко) просто нужно выйти из процесса как введу одну линию текста
источник

KY

Kyrylo Yakovenko • 𝟰... in NodeUA - JavaScript and Node.js in Ukraine
Alexander Kabolov
Не на столько глубоко) просто нужно выйти из процесса как введу одну линию текста
А что за задача такая? Может лучше repl использовать для взаимодействия с вводом?
источник

AK

Alexander Kabolov in NodeUA - JavaScript and Node.js in Ukraine
Kyrylo Yakovenko • 𝟰𝟮𝟬🦄 engineer
А что за задача такая? Может лучше repl использовать для взаимодействия с вводом?
Я не много для другой цели его использую - не хочу нахламлять - тут хорошо смотрится sdtin
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
могу ошибаться но кажется если данных меньше чем 64kb то они приходят одним куском (чанком) и нет смысла останавливать потому что там всего 1 кусок приходит
источник

AK

Alexander Kabolov in NodeUA - JavaScript and Node.js in Ukraine
Elena Sharovar
могу ошибаться но кажется если данных меньше чем 64kb то они приходят одним куском (чанком) и нет смысла останавливать потому что там всего 1 кусок приходит
Впринципе вы правы жумаю - но тут еще кое что обнаружил - после ввода первой линии все прохожит нормально - тоесть трансформится и пишется в файл - но все дальше после второй линии просто заполняет файл пустыми строками и трансформа не происходит - странно
источник
2020 March 30

IK

Ivan Kazadaev in NodeUA - JavaScript and Node.js in Ukraine
Есть кто с mongoose может помочь?)
источник

ЕХ

Егор Хильченко... in NodeUA - JavaScript and Node.js in Ukraine
Ivan Kazadaev
Есть кто с mongoose может помочь?)
давай)
источник

IK

Ivan Kazadaev in NodeUA - JavaScript and Node.js in Ukraine
Room schema :

const room = new Schema({
 users: [{
   type: Types.ObjectId,
   ref: 'User',
   required: true
 }],
 lastMessage: {
   type: lastMessage,
   default: null
 },
 messages: {
   type: Types.ObjectId,
   ref: 'Messages'
 },
 createdAt: { type: Date, default: Date.now },
 updatedAt: { type: Date, default: Date.now },
});
источник

IK

Ivan Kazadaev in NodeUA - JavaScript and Node.js in Ukraine
User schema:

const schema = new Schema({
 email: {
   type: String,
   required: true,
   unique: true
 },
 name: {
   type: String,
   required: true,
 },
 surname: {
   type: String,
   required: true
 },
 rooms: [
   {
     type: Types.ObjectId,
     ref: 'Room'
   }
 ]
});

const User = model('User', schema);



есть 2 схемы. Room и User.
Хочу сделать между ними взаимную связь.
в схеме  Room есть поле users - массив, где каждое значение - реф, который ссылается на User по ObjectId. Тут всё норм ссылается.

В схеме User есть поле rooms, по задумке это должно быть поле, которое ссылается на все румы, в которых есть данный юзер. Здесь то я и не могу построить связь.
Указал ref: 'Room', но в самой схеме Room, ID самого юзера в массиве. Как сделать так, чтоб схема User понимала, мол если есть id данного юзера в массиве юзеров в схеме Room, то добавлять эту руму себе в схему User?
источник

ЕХ

Егор Хильченко... in NodeUA - JavaScript and Node.js in Ukraine
Ivan Kazadaev
User schema:

const schema = new Schema({
 email: {
   type: String,
   required: true,
   unique: true
 },
 name: {
   type: String,
   required: true,
 },
 surname: {
   type: String,
   required: true
 },
 rooms: [
   {
     type: Types.ObjectId,
     ref: 'Room'
   }
 ]
});

const User = model('User', schema);



есть 2 схемы. Room и User.
Хочу сделать между ними взаимную связь.
в схеме  Room есть поле users - массив, где каждое значение - реф, который ссылается на User по ObjectId. Тут всё норм ссылается.

В схеме User есть поле rooms, по задумке это должно быть поле, которое ссылается на все румы, в которых есть данный юзер. Здесь то я и не могу построить связь.
Указал ref: 'Room', но в самой схеме Room, ID самого юзера в массиве. Как сделать так, чтоб схема User понимала, мол если есть id данного юзера в массиве юзеров в схеме Room, то добавлять эту руму себе в схему User?
если не ошибаюсь, в реляционных базах это делается автоматически
но в монгусе тебе прийдется повесить скрипт на pre/post, чтобы добавить реф и в другой моделе так же
источник