Node.JS [ru] | Серверный JavaScript
11.5K subscribers
92 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
💬 Как пересылать сообщения из Telegram в SMS с помощью бота

В этом гайде пользователь объясняет, как можно написать простого Telegram чат-бота на NodeJS, который будет пересылать все входящие сообщения в SMS, используя Exolve SMS API.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
⚙️ Что такое реактивное программирование? Руководство для начинающих по написанию реактивного кода

Реактивное программирование — это ключ к созданию приложений, мгновенно реагирующих на события. В статье разбираются основы этой парадигмы, реализация на JavaScript/TypeScript в Node.js и её универсальное применение.

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

Fullstack TypeScript разработчик [Senior]
TypeScript, Node.js, React, PostgreSQL, Docker, Kubernetes, Git, Linux
Уровень дохода не указан | Senior уровень

Backend Developer (Node.js)
Node.js, TypeScript, MongoDB, NestJS, Kafka, Redis, Docker
от 3 800 до 5 500 $ | 5 лет опыта

Senior Fullstack/Backend Developer (Node.js, TypeScript, Postgres, Web3)
Node.js, TypeScript, PostgreSQL, Svelte.js, AWS, Linux, Git, функциональное программирование, Web3
от 4 000 до 6 000 $ | 6 лет опыта
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Создание ванильного JavaScript signal() с Proxy

Статья объясняет, как с помощью Proxy в ванильном JavaScript реализовать реактивные сигналы, упрощая управление состоянием. Рассматриваются основные принципы и примеры применения.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
1
⚙️ Что такое Cluster в Node.js?

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

const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
// Создание воркеров на основе числа ядер процессора
console.log(`Master ${process.pid} is running`);

for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}

cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died`);
});
} else {
// Каждый воркер будет запускать сервер
http.createServer((req, res) => {
res.writeHead(200);
res.end(`Hello from worker ${process.pid}\n`);
}).listen(8000);

console.log(`Worker ${process.pid} started`);
}


➡️ Cluster позволяет создавать несколько экземпляров сервера на каждом ядре процессора, увеличивая масштабируемость и производительность приложений на Node.js.


🖥 Подробнее тут
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤝2
🔎 Подборка вакансий для лидов

Senior Node.js Developer в стартап (Nest.js)
🟢TypeScript, NestJS, Node.js, PostgreSQL, RabbitMQ, Docker
🟢до 300 000 ₽ | более 6 лет опыта

Senior Fullstack Developer
🟢Node.js, React, JavaScript, TypeScript, MongoDB, Clickhouse, Elasticsearch
🟢от 4 500 до 6 500 $ до вычета налогов | более 6 лет опыта

Lead JavaScript - Developer
🟢JavaScript, Node.js, React, Vue.js, MVC, ООП, HTML, C++, Java
🟢от 350 000 ₽ | более 6 лет опыта
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Новые альтернативы innerHTML

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🌟 Найди свою зону «быстрого роста»

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

👉 Совет: определись, какие навыки принесут максимум пользы для текущей работы. Это может быть новый инструмент, библиотека или углубление в архитектуру. Фокусируйся на них в течение месяца и замечай, как твоя ценность для команды растёт.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🔎 Подборка зарубежных вакансий

Senior Node.js developer
🟢Node.js, SQL, Git, ООП, MongoDB, Angular
🟢до 4 000 $ до вычета налогов | более 6 лет опыта

Backend Engineer (Node.js)
🟢Node.js, GraphQL, RedwoodJS, Prisma ORM, Firebase, Git
🟢Уровень дохода не указан | 3–6 лет опыта

Middle+ NodeJS backend developer
🟢Node.js, TypeScript, GraphQL, PostgreSQL, Websockets, Redis
🟢от 2 000 до 4 500 $ на руки | более 6 лет опыта
Please open Telegram to view this post
VIEW IN TELEGRAM
💩7🤮3👍1🖕1
⚙️ Модульные CSS-архитектуры в Next.js: BEM, SMACSS, OOCSS и их применение

Статья объясняет использование модульных CSS-архитектур, таких как BEM, SMACSS и OOCSS, в проектах на Next.js. Рассматриваются подходы к созданию масштабируемой и организованной структуры стилей.

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

Напишите скрипт, который принимает путь к папке, считывает все файлы в этой папке и записывает их имена, размеры (в байтах) и дату последнего изменения в JSON-файл.

Пример использования:

node generateFileInfo.js ./example-folder

"name": "file1.txt",
"size": 1234,
"lastModified": "2023-09-01T12:34:56.789Z"

"name": "file2.js",
"size": 456,
"lastModified": "2023-09-02T14:56:23.123Z"


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

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

const folderPath = process.argv[2];

if (!folderPath) {
console.error('Пожалуйста, укажите путь к папке.');
process.exit(1);
}

fs.readdir(folderPath, (err, files) => {
if (err) {
console.error('Ошибка чтения папки:', err.message);
return;
}

const fileInfo =
files.map(file => {
const filePath = path.join(folderPath, file);
const stats = fs.statSync(filePath);

return {
name: file,
size: stats.size,
lastModified: stats.mtime.toISOString(),
};
});

fs.writeFile('files.json', JSON.stringify(fileInfo, null, 2), err => {
if (err) {
console.error('Ошибка записи файла:', err.message);
return;
}
console.log('Информация о файлах сохранена в files.json');
});
});
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
⚙️ Асинхронность – не баг, а фича: 4 паттерна, которые спасут ваш распределенный сервис

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
👩‍💻 Задачка по 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👎1🔥1
🔎 Подборка вакансий для джунов

Node.js backend developer
🟢JavaScript, TypeScript, Node.js, Express.js, NestJS, Docker, React, Vue.js, PHP, Python
🟢до 1 000 $ до вычета налогов | 1–3 года опыта

Node.js Developer
🟢Node.js, TypeScript, Express.js, NestJS, SQL, NoSQL, Blockchain, Web3.js, MongoDB, PostgreSQL, RabbitMQ, RESTful API, WebSocket
🟢Уровень дохода не указан | 1–3 года опыта

Web-программист Node.js (Junior) удаленно
🟢Node.js, Express.js, React.js, PostgreSQL, Linux, Nginx, Git, Apache Kafka
🟢от 30 000 до 50 000 ₽ до вычета налогов | 1–3 года опыта
Please open Telegram to view this post
VIEW IN TELEGRAM
😁6🔥2
🤔 Почему мы выбрали gRPC вместо tRPC?

Статья объясняет, как gRPC упрощает переход от монолита к микросервисам в приложениях на основе Domain Driven Design. Рассматриваются преимущества: прямые вызовы, типизация, децентрализация и автоматизация методов.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Как работает worker_threads в Node.js и зачем он нужен?

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

➡️ Пример:

const { Worker, isMainThread, parentPort } = require('worker_threads');

if (isMainThread) {
// Главный поток
console.log('Главный поток запущен');

const worker = new Worker(__filename); // Создаем воркер

worker.on('message', (msg) => {
console.log('Результат от воркера:', msg);
});

worker.postMessage('Начать расчет'); // Передаем сообщение воркеру
} else {
// Воркер
parentPort.on('message', (msg) => {
console.log('Сообщение от главного потока:', msg);
// Выполняем тяжелый расчет
const result = Array(1e6).fill(0).reduce((acc, _, i) => acc + i, 0);
parentPort.postMessage(result); // Отправляем результат обратно
});
}


🗣️ В этом примере главный поток создает воркер, который выполняет вычисление суммы чисел, не блокируя основной поток. Это позволяет использовать многопоточность в JavaScript для высоконагруженных операций.


🖥 Подробнее тут
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
📝 Подборка вакансий для мидлов

Бэкэнд-разработчик JavaScript
JavaScript, Node.js, React, Angular, RESTful API, PostgreSQL, MongoDB, RabbitMQ, Git
от 250 000 до 400 000 ₽ | от 3 лет опыта

Backend (Node.js) разработчик
Node.js, TypeScript, JavaScript, MoleculerJS, PostgreSQL, Unit-тестирование, Git
Уровень дохода не указан | от 4 лет опыта

Middle+ NodeJS backend developer (Удаленно)
Node.js, TypeScript, GraphQL, PostgreSQL, Websockets, Redis, GitLab
от 2 000 до 4 500 $ | Требуемый опыт не указан
Please open Telegram to view this post
VIEW IN TELEGRAM
👀 Аптайм вахтер: мониторинг веб-сервисов с помощью Globalping и уведомлениями в Telegram

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1