
Типизация API в TypeScript: где рушится доверие к типам
fetch возвращает any, а ваш интерфейс Response — обещание, которое сервер не давал. Разбираем четыре способа связать типы с реальными данными и цену каждого.

fetch возвращает any, а ваш интерфейс Response — обещание, которое сервер не давал. Разбираем четыре способа связать типы с реальными данными и цену каждого.

Почему npm install в Dockerfile раздувает образ до гигабайта, зачем нужны две стадии сборки и чем npm ci отличается от npm install на CI.

Флаки-тесты, забытый await, общее состояние между кейсами и таймеры, которые никто не мокал. Разбираем ошибки, из-за которых зелёный прогон ничего не подтверждает.

Как снимать метрики с Node.js-сервиса через prom-client, не блокируя event loop, что именно мерить помимо CPU и почему ваш RPS-график врёт, если считать его в обработчике.

console.log отъедает CPU под нагрузкой и не даёт структуры для поиска. Разбираем, чем платят Winston, Pino и Bunyan, и когда какой выбрать.

In-memory кеш в одном процессе Node.js держался до 40 rps, а на четырёх воркерах кластера начал отдавать устаревшие данные. Разбираем, почему так вышло и чем платить за каждое решение.

Отправка письма прямо в обработчике HTTP кладёт время ответа в зависимость от чужого SMTP. Разбираем, как вынести долгие задачи в очередь и не потерять их при перезапуске процесса.

Что проверить в слое валидации Node.js-приложения: границы, типы, вложенные объекты, санитизация. Разбор частых дыр и сравнение Zod, Joi и express-validator.

fetch, undici, axios и got решают одну задачу по-разному. Разбираем, чем платишь за каждый подход, где утекают сокеты и почему запрос без таймаута однажды подвесит сервис.

Синхронный fs в обработчике запроса, чтение гигабайтного лога в память, гонки при записи и молчаливое проглатывание ошибок — разбираем, где именно рушится работа с файлами в Node.js и чем это лечить.

Как читать гигабайтные файлы без OutOfMemory, соединять источники через pipeline и не потерять ошибки в середине цепочки. Разбираем backpressure, объектные стримы и типичные утечки.

Парсинг строки без часового пояса, сложение месяцев, разница между датами — три места, где нативный Date молча даёт неверный результат. Разбираем, где он ломается и чем закрыть.