we_use_js | Unsorted

Telegram-канал we_use_js - Node.JS [ru] | Серверный JavaScript

11560

Все о разработке backend части на JavaScript (Node JS). А так же: Express JS, Next JS, Nest, Socket.IO Канал на бирже - https://telega.in/c/we_use_js По вопросам рекламы или разработки: @g_abashkin РКН: https://vk.cc/cGhHyj

Subscribe to a channel

Node.JS [ru] | Серверный JavaScript

👩‍💻 Как эффективно управлять ошибками в серверных приложениях Node.js?

В серверных приложениях на Node.js правильное управление ошибками является критически важным для обеспечения стабильности и безопасности. Ошибки могут возникать в асинхронных операциях, таких как работа с базами данных или сторонними API.

➡️ Node.js предоставляет несколько механизмов для управления ошибками: от обработки исключений в промисах до централизованной обработки с помощью middleware в Express.

const express = require('express');
const app = express();

app.get('/', async (req, res, next) => {
try {
const result = await someAsyncOperation();
res.send(result);
} catch (err) {
next(err);
}
});

app.use((err, req, res, next) => {
console.error('Ошибка:', err.message);
res.status(500).send('Ошибка сервера');
});

app.listen(3000, () => {
console.log('Сервер запущен');
});


🗣️ В серверных приложениях важно использовать глобальные обработчики ошибок и middleware, чтобы не допустить краха сервера при возникновении исключений в асинхронных запросах.

Читать полностью…

Node.JS [ru] | Серверный JavaScript

🧩 Frontend & Fullstack: папка для тех, кто пишет фичи, а не диплом

Собрали каналы, где нет воды про «как стать программистом с нуля за 7 дней».
Тут только рефы, реальные стеки, код-подходы и чуваки, которые шарят.

👨‍💻 Что внутри:

— JSX, хуки, ваниль и та самая боль с пикселями

— Страдания с SSR, оптимизация рендеринга и devtools-хаки

— Git-пули, деплои, CI/CD, продовые факапы и то, как их чинят на ходу

— Fullstack-мысли: от фронта до базы, от API до тёмной темы в админке

— Пишут ребята с 5+ лет боевого опыта — делятся тем, о чём не расскажут на курсах

— Мемы, кейсы, паттерны и фронт с человеческим лицом


Если ты когда-нибудь гуглил react rerender too many times или правил верстку в 03:47 ночи — ты по адресу.

📂 Забирай папку — и пиши, как бог.

Читать полностью…

Node.JS [ru] | Серверный JavaScript

📈 Подборка статей для вашей карьеры

Сила лидерского слушания

Как пройти стажировку бизнес- и системного аналитика и не «сгореть» в персональной преисподней

«Так и знала, что вы — бывший двоечник!» Самые глупые ошибки моей компьютерной молодости

Что лучше — оценка рекрутера или подбрасывание монетки?

Мотивационные стили в обучении: почему вам (возможно) не нужны цели или общение с одногруппниками

Читать полностью…

Node.JS [ru] | Серверный JavaScript

⚙️ Как я создавал онлайн игру «нарды». Сервер

В статье рассказывается о реализации ботов для игры "длинные нарды". Автор описывает, как строится архитектура сервера и модули, а также делится особенностями создания ИИ-игроков, которые управляются программой.

Читать...

Читать полностью…

Node.JS [ru] | Серверный JavaScript

👩‍💻 Как работает система событий и EventEmitter в Node.js?

В Node.js события обрабатываются с помощью объекта EventEmitter. Этот объект позволяет объявлять события и реагировать на них с помощью подписок. Когда событие происходит, вызываются все функции, подписанные на него. Это важный механизм для асинхронной архитектуры.

➡️ Пример:

const EventEmitter = require('events');
const emitter = new EventEmitter();

emitter.on('event', () => {
console.log('Событие произошло!');
});

emitter.emit('event'); // "Событие произошло!"


🗣️ EventEmitter широко используется в Node.js для асинхронной обработки и реакции на различные события в системе.

Читать полностью…

Node.JS [ru] | Серверный JavaScript

👩‍💻 Как я искал рекомендации аналитиков по покупке российских ценных бумаг в JSON формате

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

Читать...

Читать полностью…

Node.JS [ru] | Серверный JavaScript

👩‍💻 Задачка по NodeJS

Создайте приложение на Node.js, которое принимает URL в качестве аргумента командной строки, загружает HTML-контент по указанному URL, подсчитывает количество тегов на странице и сохраняет результат в tags.json.

➡️ Пример:

node app.js report https://example.com — сохраняет количество тегов HTML-страницы в файл tags.json.
node app.js print https://example.com — выводит статистику по тегам на странице в консоль.

Решение задачи ⬇️

const https = require('https');
const fs = require('fs');
const { JSDOM } = require('jsdom');

const action = process.argv[2];
const url = process.argv[3];

function fetchHtml(url) {
return new Promise((resolve, reject) => {
https.get(url, (res) => {
let data = '';
res.on('data', (chunk) => (data += chunk));
res.on('end', () => resolve(data));
}).on('error', (err) => reject(err));
});
}

async function report(url) {
try {
const html = await fetchHtml(url);
const dom = new JSDOM(html);
const tags = Array.from(dom.window.document.getElementsByTagName('*')).map(el => el.tagName);
const tagCount = tags.reduce((acc, tag) => {
acc[tag] = (acc[tag] || 0) + 1;
return acc;
}, {});

fs.writeFileSync('tags.json', JSON.stringify(tagCount, null, 2));
console.log('Статистика сохранена в tags.json');
} catch (err) {
console.error('Ошибка:', err);
}
}

async function print(url) {
try {
const html = await fetchHtml(url);
const dom = new JSDOM(html);
const tags = Array.from(dom.window.document.getElementsByTagName('*')).map(el => el.tagName);
const tagCount = tags.reduce((acc, tag) => {
acc[tag] = (acc[tag] || 0) + 1;
return acc;
}, {});

console.log('Статистика по тегам:', tagCount);
} catch (err) {
console.error('Ошибка:', err);
}
}

if (action === 'report') {
report(url);
} else if (action === 'print') {
print(url);
} else {
console.log('Используйте команды: report <URL> или print <URL>');
}

Читать полностью…

Node.JS [ru] | Серверный JavaScript

🔍 Не «улучшай» код, который не используешь

Кажется, что старый кусок можно сделать красивее и лаконичнее? Но ты даже не уверен, что он ещё актуален.

👉 Совет: сначала проверь, используется ли вообще этот код. Удали мёртвый — это лучше, чем его улучшить. Поддерживать неиспользуемую логику — всё равно что чистить пустой склад каждый день.

Читать полностью…

Node.JS [ru] | Серверный JavaScript

👩‍💻 Корутины: stackful vs stackless

В статье разберемся, что такое stackless и stackful корутины, их основные отличия, плюсы и минусы. Я объясню это простым языком, чтобы даже сложные концепции многопоточности были легко понятны.

Читать...

Читать полностью…

Node.JS [ru] | Серверный JavaScript

📈 Подборка статей для вашей карьеры

Пришёл на вакансию дизайнера, а стал питонистом: как IT-специалисты нашли свою первую работу

На сколько денег может рассчитывать ИТ-предприниматель в разных ветках развития

Анализ задачи с собеседования в Google: конь и телефонные кнопки

Быстрый старт в QA Fullstack: чем вооружиться будущему стажеру в Альфа-Банке

Как убить самоорганизацию в команде: вредные советы для лидера

Читать полностью…

Node.JS [ru] | Серверный JavaScript

👩‍💻 HTTP-ответ с таймером самоуничтожения

Реализуйте простой HTTP-сервер на Node.js, который возвращает уникальные одноразовые ссылки (вида /once/abc123) и сам удаляет их после одного использования или по истечении 60 секунд — в зависимости от того, что наступит раньше.

При повторном доступе к использованной или истекшей ссылке сервер должен возвращать 410 Gone.

Поведение:

GET-запрос на /create создаёт новую одноразовую ссылку, возвращает её клиенту.

При первом запросе к этой ссылке (/once/<id>) возвращается "✅ Valid link" и она становится недействительной.

Если никто не обратился к ссылке за 60 секунд — она автоматически удаляется, и возвращается "410 Gone" при попытке перейти.


Решение задачи🔽

const http = require('http');
const crypto = require('crypto');

const PORT = 3000;
const links = {}; // { id: { createdAt: timestamp, used: bool } }

function generateId() {
return crypto.randomBytes(6).toString('hex');
}

function cleanupLinks() {
const now =
Date.now();
for (const id in links) {
if (now - links[id].createdAt > 60000 || links[id].used) {
delete links[id];
}
}
}

setInterval(cleanupLinks, 5000); // чистим каждые 5 сек

const server = http.createServer((req, res) => {
const url = new URL(req.url, `http://${
req.headers.host}`);

if (url.pathname === '
/create') {
const id = generateId();
links[id] = { createdAt:
Date.now(), used: false };
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end(`/once/${id}`);
return;
}

const match = url.pathname.match(/^\
/once\/([a-z0-9]+)$/);
if (match) {
const id = match[1];
const record = links[id];

if (!record || record.used || (
Date.now() - record.createdAt > 60000)) {
res.writeHead(410, { 'Content-Type': 'text/plain' });
res.end('🔒 410 Gone: Link expired or used');
} else {
links[id].used = true;
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('✅ Valid link');
}
return;
}

res.writeHead(404, { 'Content-Type': 'text/plain' });
res.end('404 Not Found');
});

server.listen(PORT, () => {
console.log(`Server running at http://localhost:${PORT}`);
});

Читать полностью…

Node.JS [ru] | Серверный JavaScript

👩‍💻 Проблемы экспорта по умолчанию в JavaScript модулях

JavaScript модули позволяют организовывать код для повторного использования. Существует два метода экспорта: по умолчанию и именованный. В этой статье разбираем экспорт по умолчанию и причины, почему его стоит избегать.

Читать...

Читать полностью…

Node.JS [ru] | Серверный JavaScript

👩‍💻 Мини-сервер с авто-ограничением запросов по IP

Реализуйте простой HTTP-сервер на Node.js (без фреймворков), который обрабатывает GET-запросы и возвращает "Hello, client!".

Но с одним условием: если IP-адрес клиента делает больше 5 запросов за 10 секунд, сервер должен временно блокировать этот IP на 30 секунд и отвечать ему "429 Too Many Requests".

Решение задачи🔽

const http = require('http');
const PORT = 3000;

const requestLog = {}; // { ip: [timestamps] }
const bannedIPs = {}; // { ip: unblockTimestamp }

function cleanupOldRequests(ip) {
const now =
Date.now();
requestLog[ip] = (requestLog[ip] || []).filter(ts => now - ts < 10000);
}

const server = http.createServer((req, res) => {
const ip = req.socket.remoteAddress;

if (bannedIPs[ip] &&
Date.now() < bannedIPs[ip]) {
res.writeHead(429, { 'Content-Type': 'text/plain' });
return res.end('429 Too Many Requests');
}

cleanupOldRequests(ip);
requestLog[ip].push(
Date.now());

if (requestLog[ip].length > 5) {
bannedIPs[ip] =
Date.now() + 30000; // блок на 30 сек
requestLog[ip] = [];
res.writeHead(429, { 'Content-Type': 'text/plain' });
return res.end('429 Too Many Requests');
}

res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello, client!');
});

server.listen(PORT, () => {
console.log(`Server listening on http://localhost:${PORT}`);
});

Читать полностью…

Node.JS [ru] | Серверный JavaScript

👩‍💻 Управляйте промисами используя Promise.withResolvers()

Метод Promise.withResolvers() повышает гибкость, позволяя удалённо разрешать или отклонять промисы, упрощая и оптимизируя асинхронный код.

Читать...

Читать полностью…

Node.JS [ru] | Серверный JavaScript

🔬 Тестируй даже то, что кажется надёжным

«Это никогда не ломается» — последняя фраза перед катастрофой. Особенно в частях кода, которые трогают редко.

👉 Совет: пиши тесты для стабильных участков кода. Именно они чаще всего становятся ловушкой, когда всё вокруг уже поменялось, а эти куски — нет. Спокойствие в проде начинается с паранойи в деве.

Читать полностью…

Node.JS [ru] | Серверный JavaScript

👩‍💻 База, которую нужно знать про JSON Schema

Сегодня мы рассмотрим одну из тем, которая, как ни странно, остаётся недооценённой — JSON Schema. Если ты аналитик (или хочешь им быть) и в твоей работе часто мелькают JSON-файлы, то наверняка знаешь, как сложно порой бывает держать всё это под контролем. В этой статье мы разберём всё, что тебе нужно знать про JSON Schema.

Читать...

Читать полностью…

Node.JS [ru] | Серверный JavaScript

👩‍💻 Освоение безопасной для типов JSON-сериализации в TypeScript

Предлагаем руководство по использованию TypeScript для безопасной для типов сериализации и десериализации данных в формате JSON. Освоение этой стратегии позволит своевременно обнаруживать потенциальные ошибки во время разработки приложения.

Читать...

Читать полностью…

Node.JS [ru] | Серверный JavaScript

Как frontend-разработчику получить оффер в Bigtech?

Ты вроде бы уже не джун, но всё равно чувствуешь, что топчешься на месте? Рынок перегрет, требований всё больше, а откликов — всё меньше? На собесах валят на алгоритмах или просят "нарисовать" архитектуру, как будто ты ведущий.

При этом вокруг кто-то постоянно получает офферы в Яндекс или VK, а у тебя не получается даже дойти до финального этапа? Хочется стабильности, интересных задач и наконец-то попасть в сильную команду
...

Меня зовут Тихон, привет! Я — действующий Frontend-разработчик и ментор. Помогаю устроиться на хорошие позиции в Bigtech и сопровождаю на испытательном сроке.


В своем канале:
👉 публикую видео с решением задач, которые прямо сейчас дают крупные компании на собеседованиях
👉даю примеры по прохождению собеседований
👉разбираю резюме и докручиваю резюме подписчиков
👉и просто создаю дружелюбное, комфортное сообщество, где коллеги всегда готовы подсказать и поддержать

🎁В закрепе тебя ждёт подборка из 60 задач, которые сейчас дают на собеседованиях Яндекс, Т-Банк и другие крупные IT игроки.


Подписывайся и получай максимум пользы, а нас уже больше 2000 🤓: /channel/+gqcnB_osc9VjNWU6


Реклама, ИП Галактионов Тихон Витальевич, инн: 771618975809, erid: 2W5zFK31WxQ

Читать полностью…

Node.JS [ru] | Серверный JavaScript

👩‍💻 Введение в AI Selfie Background Remover с использованием TensorFlow.js для React-приложений

В статье рассматривается "React Selfie AI Background Remover" — компонент, использующий TensorFlow.js для удаления фона в браузере. Основные фишки: точная сегментация с MediaPipe, легкая интеграция в React и live demo.

Читать...

Читать полностью…

Node.JS [ru] | Серверный JavaScript

👩‍💻 Как ускорить создание компонентов с помощью Plop-генератора или автоматизация рутинных задач в React

В статье рассказывается о крупной фронтенд-команде, которая работает с микросервисами и общей дизайн-системой. Несмотря на стандарты, возникали проблемы, и статья подробно раскрывает, как они были решены.

Читать...

Читать полностью…

Node.JS [ru] | Серверный JavaScript

👩‍💻 Как деструктуризация массивов может замедлить JavaScript код

В статье объясняется, как деструктуризация массивов может замедлить JavaScript код. Рассматриваются различия в байткоде и проводится тест, показывающий, почему ArrayAssignmentPattern не всегда оптимален.

Читать...

Читать полностью…

Node.JS [ru] | Серверный JavaScript

⚙️ Паттерн «Бэкенд для фронтенда»: преимущества, недостатки и лучшие практики для реализации

Если ты хочешь стать настоящим мастером API, тебе нужно знать о паттерне BFF. В этой статье рассказываем, как создавать управляемую архитектуру с использованием BFF, избегая избыточной сложности и головной боли при поддержке.

Читать...

Читать полностью…

Node.JS [ru] | Серверный JavaScript

🖥 Использование ChatGPT для автоматизации генерации кода в JS-проекте

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

Читать...

Читать полностью…

Node.JS [ru] | Серверный JavaScript

👩‍💻 Якорные ссылки и как их сделать потрясающими

Якорные ссылки — простой способ создать навигацию по странице. Например, в оглавлении можно использовать якорные ссылки для перехода к различным разделам страницы.

Читать...

Читать полностью…

Node.JS [ru] | Серверный JavaScript

👩‍💻 В чём разница между exports и module.exports

Вы знаете в чём разница между exports и module.exports в Node.js? Для начала рассмотрим, что представляет собой объект модуля.

Читать...

Читать полностью…

Node.JS [ru] | Серверный JavaScript

👩‍💻 Всё о циклах в JavaScript

В каждом языке программирования есть циклы. Циклы выполняют операцию (т. е. часть работы) несколько раз, обычно по одному разу для каждого элемента массива или списка, или просто повторяют операцию до тех пор, пока не будет выполнено определённое условие.

Читать...

Читать полностью…

Node.JS [ru] | Серверный JavaScript

➡️ Создание конфигурируемого Webhook-модуля для NestJS-приложении

В рамках этой статьи я опишу создание двух NestJS-модулей с различным способом конфигурирования: утилитарный модуль и бизнес-модуль со своей базой данных.

Читать...

Читать полностью…

Node.JS [ru] | Серверный JavaScript

📊 Обзор лучших библиотек для визуализации данных

Визуализация данных — важная часть любого проекта, связанного с аналитикой и обработкой данных. Мы рассмотрим 7 библиотек: Plotly, D3.js, Nivo, Latitude, Apache ECharts, Victory и Chart.js.

Читать...

Читать полностью…

Node.JS [ru] | Серверный JavaScript

👩‍💻 Переменные среды/окружения в Node.js: Как правильно их установить

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

Читать...

Читать полностью…

Node.JS [ru] | Серверный JavaScript

⚙️ PostgreSQL Antipatterns: валим «слона» — highload на ровном месте

Сегодняшняя тема посвящена нелегким взаимоотношениям клиентского приложения и сервера PostgreSQL: как на ровном месте, неудачной архитектурой приложения, можно обеспечить себе хронические проблемы производительности.

Читать...

Читать полностью…
Subscribe to a channel