Node.JS [ru] | Серверный JavaScript
11.5K subscribers
91 photos
6 videos
25 files
3.16K links
Все о разработке backend части на JavaScript (Node JS).
А так же: Express JS, Next JS, Nest, Socket.IO

Канал на бирже - https://telega.in/c/we_use_js

По вопросам рекламы или разработки: @g_abashkin

РКН: https://vk.cc/cJPGOP
Download Telegram
⭕️ Я хочу сыграть с тобой в одну игру: пилим «Крестики-нолики» на JavaScript

Хватит теории – пора практиковаться! Мы разберем создание полноценной браузерной игры, затрагивая ключевые концепции frontend-разработки. Идеально для новичков, жаждущих применить свои знания в реальном проекте.

Читать...
🔎 Подборка вакансий для лидов

Tech Lead
🟢C#/Java/Go, NodeJS, JS/TS, Vue, Angular/React, Kafka
🟢от 500 000 до 600 000 ₽ | Более 6 лет

Tech Lead (TypeScript+React+Node.js) в продуктовую компанию
🟢Nodejs, Express, NestJS, Postgres, REST, WebSockets
🟢от 400 000 ₽ | Более 6 лет

Tech Lead (Node.js)
🟢SQL, PostgreSQL, Node.js, TypeScript, JavaScript, NestJS
🟢от 2 700 $ | 3–6 лет

Tech Lead developer GameDev (node.js/Js)
🟢React.js, MobX, Nest.js, Express.js, GraphQL
🟢от 300 000 до 400 000 ₽ | 3–6 лет

Tech Lead (PHP/Laravel + Vue.js)
🟢PHP, Laravel, PostgreSQL, VueJS, Kafka, CI/CD
🟢Уровень дохода не указан | 3–6 лет
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍2🤡2
👩‍💻 Циклические импорты на фронтенде

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
💡 Карьера — это не про «идеальную работу», а про опыт и умение адаптироваться

В мире, где всё меняется быстрее, чем ты успеваешь обновлять резюме, держаться за одну карьерную траекторию — всё равно что пытаться угнаться за горизонтом. Умение перестраиваться, пробовать новое и брать на себя задачи, которые немного пугают, — вот что реально важно. И это не про «выйди из зоны комфорта», а про осознанный выбор расти и не цепляться за привычное.

🎯 Что делать: пообщайся с коллегой из другой области, возьми на себя один проект вне своей зоны, попробуй новый инструмент или язык, устрой «ревизию» навыков — что сейчас реально работает на тебя, а что пора обновить? Простые шаги, но каждый — ключ к росту и новым возможностям.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🔎 Подборка валютных вакансий

Backend разработчик NodeJS
🟢JavaScript, VueJS, PostgreSQL, Node.js, Java, TypeScript, REST API, MongoDB, Docker-compose
🟢от 800 000 до 1 250 000 ₸ | 3–6 лет

Senior Node.js, React.js Developer
🟢Node.js, React.js, Nest.js, Next.js, TypeScript, JavaScript
🟢от 2 500 до 3 500 $ | 3–6 лет

Backend Developer (Node.js), Billing Team
🟢Node.js, Koa, NestJS, MongoDB, TypeScript, Kafka, Bull, Redis, Clickhouse, Elasticsearch
🟢от 3 800 до 6 300 $ | 3–6 лет

Senior Node.js, React.js Developer
🟢Node.js, React.js, Nest.js, Next.js, TypeScript, JavaScript, PostgreSQL, MongoDB, Express.js, Redux, Docker, RESTful API
🟢от 2 500 до 3 500 $ | 3–6 лет
Please open Telegram to view this post
VIEW IN TELEGRAM
🤡3👏1
🎯 Выстрелил и забыл: 3 основные стратегии отправки сообщений в Kafka

Какой подход обеспечит вашему проекту идеальный баланс производительности и гарантии доставки: рискованная стратегия «Выстрелил и забыл» или продвинутая асинхронная отправка?

Читать...
👍1
👩‍💻 Задачка по NodeJS

Создайте приложение на Node.js, которое кэширует данные с ограничением по времени. Когда кэш истекает, данные должны автоматически обновляться из внешнего источника (например, из API) при следующем запросе.

➡️ Пример:

node app.js fetch — получает данные из кэша, а если кэш истек, то запрашивает данные заново и обновляет кэш.

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

const fs = require('fs');
const path = require('path');
const fetch = require('node-fetch');

const cacheFile = path.join(__dirname, 'cache.json');
const CACHE_TTL = 60 * 1000; // 1 минута

// Функция для обновления кэша
async function updateCache() {
const data = await fetch('
https://api.example.com/data').then(res => res.json());
const cacheData = { data, timestamp:
Date.now() };
fs.writeFileSync(cacheFile, JSON.stringify(cacheData));
return data;
}

// Функция для получения данных из кэша
async function fetchData() {
if (fs.existsSync(cacheFile)) {
const cache = JSON.parse(fs.readFileSync(cacheFile, 'utf8'));
const isCacheValid =
Date.now() - cache.timestamp < CACHE_TTL;

if (isCacheValid) {
console.log('Данные из кэша:',
cache.data);
return
cache.data;
}
}
console.log('Обновление кэша...');
return await updateCache();
}

// Проверка кэша
fetchData().then(data => console.log('Полученные данные:', data));
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41
👩‍💻 Как обнаружить изменение атрибутов веб-компонента

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
👩‍💻 Задачка по NodeJS

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

➡️ Пример:

node app.js analyze filename.txt — считывает файл filename.txt построчно, подсчитывает слова в каждой строке и выводит их общее количество для каждой строки в консоль.

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

const fs = require('fs');
const readline = require('readline');
const path = require('path');

function analyzeFile(filePath) {
const lineReader = readline.createInterface({
input: fs.createReadStream(filePath),
crlfDelay: Infinity
});

lineReader.on('line', (line) => {
const wordCount = line.trim().split(/\s+/).filter(Boolean).length;
console.log(`Строка: "${line}" - Количество слов: ${wordCount}`);
});

lineReader.on('close', () => {
console.log('Анализ файла завершён.');
});
}

const filePath = process.argv[2];
if (!filePath) {
console.error('Укажите путь к файлу для анализа.');
process.exit(1);
}

const fullPath = path.resolve(filePath);
analyzeFile(fullPath);
Please open Telegram to view this post
VIEW IN TELEGRAM
🔎 Подборка вакансий для джунов

Node.js разработчик Junior+
🟢JavaScript, Node.js, TypeScript, ES6, Git
🟢от 50 000 до 90 000 ₽ | 1–3 года

Junior JavaScript разработчик
🟢JavaScript, Node.js, Google Apps Script, PostgreSQL
🟢от 70 000 ₽ | 1–3 года

Junior Backend - разработчик Node.JS
🟢Node.js, JavaScript, TypeScript, NestJS, Redis, RabbitMQ, Apache Kafka, NATS
🟢до 130 000 ₽ | 1–3 года

Junior Node.js Engineer
🟢React, Redux, JavaScript, Node.js
🟢Уровень дохода не указан | Без опыта
Please open Telegram to view this post
VIEW IN TELEGRAM
👀 Аптайм вахтер: мониторинг веб-сервисов с помощью Globalping и уведомлениями в Telegram

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Что такое потоки (streams) в Node.js и как они используются для обработки данных?

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

➡️ В этом примере поток чтения файла передает данные в поток записи, минимизируя задержки и объем памяти:

const fs = require('fs');

const readStream = fs.createReadStream('input.txt');
const writeStream = fs.createWriteStream('output.txt');

readStream.pipe(writeStream);


🗣 Потоки широко применяются для передачи данных между файловыми системами, сетевыми запросами и других задачах ввода-вывода, где важна оптимизация.
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
🔎 Подборка вакансий для мидлов

Middle Backend-разработчик (Node.js - Fastify)
🟢Node.js, JavaScript, PostgreSQL, Fastify
🟢от 180 000 до 220 000 ₽ | 1–3 года

Middle Fullstack Developer (Node.js + React)
🟢Node.js, React, PostgreSQL, Docker, MUI, Strapi
🟢Уровень дохода не указан | 1–3 года

Fullstack Middle разработчик (Node.js + Vue.js)
🟢Node.js, Vue.js, PostgreSQL, RabbitMQ, Kubernetes, CI/CD
🟢от 240 000 ₽ до вычета налогов | 3–6 лет

Backend-разработчик
🟢JavaScript, TypeScript, Node.js, Mongoose, Express, MongoDB, Git, Docker, nginx, Linux
🟢от 200 000 ₽ | 3–6 лет
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
👩‍💻 Новые альтернативы innerHTML

Статья объясняет появление метода setHTMLUnsafe для работы с HTML в браузерах. Разбираются особенности безопасности, отличия от setHTML и innerHTML, а также поддержка в разных браузерах и значение нового подхода к именованию методов.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
👩‍💻 Задачка по NodeJS

Создайте сервер на Node.js, который логирует все входящие запросы с указанием времени и метода запроса (GET, POST и т. д.). Логи должны сохраняться в файл requests.log. Каждая запись должна добавляться в файл с новой строки, а файл логов должен автоматически очищаться каждый день в полночь.

➡️ Пример:

• При получении запроса сервер записывает его метод и время в файл requests.log. Каждый день в полночь файл логов очищается.

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

const http = require('http');
const fs = require('fs');
const path = require('path');

// Путь к файлу логов
const logFilePath = path.join(__dirname, 'requests.log');

// Функция для записи лога
function logRequest(method) {
const timestamp = new Date().toISOString();
const logEntry = `${timestamp} - ${method}\n`;

fs.appendFile(logFilePath, logEntry, (err) => {
if (err) console.error('Ошибка записи в лог:', err);
});
}

// Создание сервера
const server = http.createServer((req, res) => {
logRequest(req.method);
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Запрос логирован!\n');
});

// Очистка файла логов в полночь
function clearLogDaily() {
const now = new Date();
const timeToMidnight = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1) - now;

setTimeout(() => {
fs.writeFile(logFilePath, '', (err) => {
if (err) console.error('Ошибка очистки логов:', err);
console.log('Файл логов очищен.');
});
clearLogDaily();
}, timeToMidnight);
}

// Запуск очистки логов
clearLogDaily();

// Запуск сервера
server.listen(3000, () => {
console.log('Сервер запущен на порту 3000');
});
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Асинхронность – не баг, а фича: 4 паттерна, которые спасут ваш распределенный сервис

Представь, что ты отправляешь сообщение в мессенджере, а оно доходит с задержкой в минуту. Бесит? А теперь представь, что у тебя сервис с миллионами пользователей, и каждое их действие должно мгновенно отражаться везде. Звучит как кошмар? Спокойно, есть четыре проверенных способа решить эту головоломку, и они реально работают.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🔎 Подборка вакансий для сеньоров

Senior Backend Developer (Node.js)
🟢Node.js, Nest.js, Hapi, TypeScript, Grafana, Prometheus, Redis, PostgreSQL, Docker, Websockets, CI/CD (GitLab)
🟢от 400 000 до 600 000 ₽ | 3–6 лет

Backend Node.js Developer Senior
🟢TypeScript, JavaScript, SQL, Node.js, REST API, Git, Docker, Linux, SOLID principles
🟢от 200 000 до 250 000 ₽ | 3–6 лет

Senior NodeJS Developer
🟢Node.js, TypeScript, NestJS, TypeORM, Docker, Linux, Git, PostgreSQL
🟢до 400 000 ₽ | 3–6 лет

BACKEND разработчик (NestJS) SENIOR
🟢Node.js, Nest.js, PostgreSQL, ElasticSearch, Redis, RabbitMQ, gRPC, MongoDB, GraphQL
🟢от 220 000 до 300 000 ₽ | 3–6 лет

Middle / Senior Back-end Developer (Node.js)
🟢Node.js, TypeScript, PostgreSQL, Microservices, Kubernetes, Docker, Kafka, CI/CD
🟢от 150 000 до 350 000 ₽ | 1–3 года
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3