Node.js Recipes
3.23K subscribers
174 photos
7 videos
1 file
622 links
По буднях нотатки по #Nodejs розробці, по вихідним огляди конференцій та доповідей (с) @galkin_nikita
Download Telegram
Як перевірити, що два об'єкти рівні?

Порівняння об’єктів у JS є складним, бо звичайні оператори рівності не порівнюють значення об’єктів. Вони перевіряють, чи змінні містять посилання на один і той самий об’єкт у пам’яті. Тому, обговорюючи порівняння об'єктів у JavaScript, потрібно враховувати два типи рівностей:
Referential equality: Визначає, чи два надані операнди відносяться до одного і того ж посилання.
Deep equality: Визначає, чи є об'єкти рівними, порівнюючи кожну властивість операндів.

Зазвичай на прикладному рівні нам треба саме deep equality. Його можна зробити:
1. Ручне порівняння, тобто порівняння через кожного ключа об’єктів. Дуже погано
2. Через JSON.stringify().Не надійно, оскільки вимагає однакового порядку атрибутів об’єктів.
3. Lodash.isEqual. добре, за умови, що він є у вас у проекті. Інакше тягнути lodash не варто.
4. Спеціальний пакет deep-equal. Добре, якщо у вас крос-платформне додаток (наприклад, Next.js).
5. assert.deepStrictEqual добре для node.js коду. Приклад на зображенні.
👍68🥱5
Сьогодні у нас нова гра #like_and_share. Мета гри - поділитися своїм досвідом та дізнатися про досвід інших учасників. Правила:

1. Публікація в каналі визначає тему. Сьогодні це npm-пакети.
2. У коментарях кожен може залишити посилання на пакет, який він використовує, і коротко описати, чому цей пакет є корисним.
3. Учасники голосують за пакети, використовуючи лайки. Не ставте негативні лайки, вони також зараховуються як позитивні.
4. У понеділок ми підведемо підсумки на YouTube-стрімі. Переможець отримає 12-місячну персональну підписку на будь-яке IDE від JetBrains.
👍16
Поясню код. За два роки сервіс з обробки stripe webhooks розрісся, тому довелося створити свій #nestjs execution context.
А ще він ілюструє:
Routing is a switch-case construct, expressed in a different syntax.
👍237
Чому числа іноді поводяться неінтуїтивно?
#tc39

Числа та арифметика JavaScript визначені в IEEE-754. Перегляньте 0.30000000000000004.com

Питання та відповідь є перекладом з репозиторію tc39/faq. А ціль посту познайомити з цим репозиторієм.
👍20
​​TypeScript Origins: The Documentary
#worth_seeing

Anders Hejlsberg, Steve Lucco, Luke Hoban, Daniel Rosenwasser, Ryan Cavanaugh, Amanda Silver, Matt Pocock, Josh Goldberg... Саме це люди зробили TypeScript. Перегляньте відео, щоб знати їх в обличчя.
👍19🔥2
Варто винести події на каналі окремим дописом:
👀 Кожного понеділка о 19:00 Node.js Weekly у форматі YouTube Stream. Посилання на сьогоднішній стрім.
👍 Експериментую з форматами. Минулого тижня з'явився новий формат #like_and_share, деталі тут: t.me/node_recipes/693.
👍25
Як зберігати enum у базах даних?

У цьому рецепті ми не будемо зупинятися на перевагах та недоліках використання enum на рівні коду. Натомість, ми розглянемо, як можна представити enum у базі даних. Під enum ми розуміємо набір рядкових значень, які може приймати певне поле. Розглянемо конкретний приклад для таблиці "users":
gender: MALE, FEMALE, UNKNOWN, NON_BINARY
status: ACTIVE, BANNED, SELF_DELETED
Важливо відзначити, що список можливих значень визначається доменною моделлю, і, отже, буде змінюватися з розвитком проекту.
Можливі підходи:
1. Зберігати значення як varchar без перевірки на рівні бази даних, чи належить значення до enum.
2. Нормалізація даних. Для кожного enum створюється окрема таблиця у форматі id, value, яка використовується для зв'язку через foreign key. У основній таблиці зберігається не саме значення, а id з відповідної таблиці.
3. Enum на рівні бази даних. Більшість баз даних підтримують enum.
4. Довідник. Цей метод є проміжним варіантом між нормалізацією та використанням enum у базі даних. Таблиця-довідник об'єднує поля id та value в одне.

При виборі підходу, який підходить для конкретної ситуації, я звертаю увагу на:
1. розмір, необхідний для зберігання даних. Нормалізація та enum у базі даних зменшують обсяг.
2. простоту отримання даних. При нормалізації потрібні join-операції
3. легкість зміни enum. Простіше з довідником та при нормалізації, а enum-in-DB потребує міграцію.
4. необхідність перевірки на рівні бази даних. Можливо, перевірка не потрібна.
5. Забезпечення консистентності підходу в рамках проекту.
6. При нормалізації - який метод генерації id буде використовуватися: uuid, sequence, nanoid.
7. На останньому місці, але не менш важливе - яка база даних використовується?
👍30
#code_only
Такий код я написав вчора для створення PDF. Це скрипт для багаторазового використання фронтенд-розробником для верстки темплейту. Коли FE закінчить верстку, я загорну код у лямду, яку буду викликати з коду Node.js.
🔥33👍5👏1
Чому використовувати void з промісом у JavaScript?

Використання void з промісом у JavaScript сигналізує, що відсутність await або .then() є навмисною, забезпечуючи читабельність коду та запобігаючи попередженням про необроблені проміси. Код буде виконуватися однаково як з void так і безнього.

У NodeJS розробки це мовна конструкція майже завжди буде у файлі, який стартує додаток/скрипт.
👍31👎2🤔2
😁517👍5🤡2
​​Я неодноразово згадував exercism.org для навчання програмуванню. Я вважаю цю платформу більш практичною, ніж LeetCode, оскільки вона пропонує курси з різних мов програмування.
Минулорічна програма "12in23" дозволяла щомісяця вивчати нову мову, а цьогорічна "48in24" викликає учасників вирішити 48 завдань за допомогою різних підходів та мов. Це чудова можливість стати гнучким інженером, а не просто розробником однієї мови.
31🔥7👍5
У дописі з хештегом #worth_seeing я ділюся відео, яке я подивився і хотів би вам порекомендувати. Сьогодні це не технічне відео, але потрібне майже будь-якому розробнику України:
Декларація ФОП 3 група 5% за 2023 рік

Навіть якщо бухгалтерію за вас веде бухгалтер, варто розуміти, як його перевірити. Адже це складова фінансової грамотності, яка безпосередньо впливає на вашу кар'єру.
23👍11
Агенда на сьогоднішній прямий ефір:
- JS ecosystem in 2023
- що таке Stripe-level SDK
- AWS Community Builders

Початок о 19 по Києву. До зустрічі в ефірі!
👍25🔥63
AWS відкрив прийом заявок на наступну когорту Community Builders.

Я сам є учасником цієї програми. Ось, що надає участь в цій програмі:
👉 доступ до Slack разом з іншими AWS Community Builders, AWS Hero та співробітниками AWS;
👉 доступ до закритих вебінарів та альфа-версій продуктів;
👉 500 доларів AWS кредитів, з можливістю запитати ще від керівника мого напрямку;
👉 ваучер на одну сертифікацію щорічно;
👉 річна підписка на Cloud Academy;
👉 swag kit (мерч)

У свою чергу, AWS очікує від мене публікацію контенту про AWS на основі мого особистого досвіду. Це, власне кажучи, те, що я робив в рамках цього телеграм-каналу до того, як потрапив до цієї програми.

Зверніть увагу, що не має значення мати 10+ років досвіду. Контент від Junior спеціаліста для Junior спеціалістів також потрібен. Тому, якщо ви створюєте контент, а тим більше українською, подайте заявку.
14👍2🔥2
Для налагодження веб-хуків я використовую ngrok. У нього є конкурент, про який варто знати:
🔗 webhook.cool безкоштовна веб версія
🔗 localcan.com платна дестопна версія

webhook.cool чудово підходить як перший крок в інтеграціях з іншою командою розробки. Так я можу почати інтеграцію до того, як піднято частину, яка відповідає за прийняття запитів. А включений guest access дозволяє спільно бачити запити, що входять.
👍34🔥5🍓1
Сьогодні у нас нова гра #like_and_share. Мета гри - поділитися своїм досвідом та дізнатися про досвід інших учасників. Правила:

1. Публікація в каналі визначає тему. Сьогодні це Chrome Extensions.
2. У коментарях кожен може залишити посилання на extension, який він використовує, і коротко описати, чому цей extension є корисним.
3. Учасники голосують за extension, використовуючи лайки. Не ставте негативні лайки, вони також зараховуються як позитивні.
4. У понеділок ми підведемо підсумки на YouTube-стрімі. Переможець отримає 12-місячну персональну підписку на будь-яке IDE від JetBrains.
15🔥6
на сайті exploringjs.com можна безкоштовно прочитати:
📕 JavaScript for impatient programmers (ES2022 edition)
📗 Deep JavaScript
📘 Tackling TypeScript
📙 Shell scripting with Node.js
👍48🔥52👀2
​​Using docker in unusual ways
#worth_seeing

Відмінне відео, яке можна назвати "Docker-based development in 2024". Рекомендую не тільки подивитися, але й спробувати підходи запропоновані у відео.
👍344
Агенда на сьогоднішній прямий ефір:
- Chrome Extensions
- emails in Node.js
- Q&A

Початок о 19 по Києву. До зустрічі в ефірі!
👍281🔥1
Тема сьогоднішнього прямого ефіру: What I learned last year?
Я розповім, що змінилося в моїх підходах у розробці за минулий рік на рівні коду, залежностей та frameworks.

Початок о 19 по Києву. До зустрічі в ефірі!
20👍11