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
👩‍💻 Умный кеш JSON-запросов в файл

Реализуйте функцию fetchWithCache(url, ttl), которая делает HTTP-запрос по заданному URL (используя https), и кеширует результат в файл.

Если при повторном вызове с тем же URL кеш актуален (время жизни не истекло), функция должна вернуть данные из файла, не обращаясь к сети.

Поведение:

• Результат сохраняется в файл с названием, основанным на URL (можно использовать хеш).

• TTL (time to live) указывается в миллисекундах.

• Если кеш устарел или отсутствует, функция делает реальный HTTP-запрос и обновляет файл.


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

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

function fetchWithCache(url, ttl) {
const cacheDir = path.resolve(__dirname, 'cache');
const hash = crypto.createHash('md5').update(url).digest('hex');
const cacheFile = path.join(cacheDir, `${hash}.json`);

if (!fs.existsSync(cacheDir)) {
fs.mkdirSync(cacheDir);
}

return new Promise((resolve, reject) => {
if (fs.existsSync(cacheFile)) {
const { mtimeMs } = fs.statSync(cacheFile);
const now =
Date.now();

if (now - mtimeMs < ttl) {
const cached = fs.readFileSync(cacheFile, 'utf-8');
return resolve(JSON.parse(cached));
}
}

https.get(url, res => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => {
fs.writeFileSync(cacheFile, data, 'utf-8');
resolve(JSON.parse(data));
});
}).on('error', reject);
});
}

// Пример использования:
fetchWithCache('
https://jsonplaceholder.typicode.com/todos/1', 5000)
.then(data => console.log(data))
.catch(err => console.error(err));
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍1👎1
👩‍💻 Какой метод глубокого клонирования в JavaScript наиболее эффективный  —  исследование

Чтобы выделить "победителя" среди методов глубокого клонирования в JavaScript, необходимо протестировать каждый из них. Предлагаем результаты серии модульных тестов.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
⚙️ Профилирование Node.js приложения с помощью Pyroscope (без автоинструментирования)

Покажу, как за пару шагов подключить Node.js к Pyroscope, настроить профилирование и без Grafana увидеть, где зарываются тормоза в коде.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 8 советов, которые сделают JavaScript-код чище

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
2👎2👍1
👩‍💻 Cypress + axe-core: быстрый старт тестов на доступность

Показываю, как быстро втащить тесты доступности в проект на Cypress с axe-core и TypeScript. Проверим контраст, aria-label, роли и alt, чтобы сделать интерфейс удобным не только для здоровяков.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
3
🤔 Я знаю, что ты думал в прошлый дейлик

На входе — обычный push. На выходе — коммит, улучшенный с помощью LLM, сохранённый в векторной базе, доступный для поиска и семантического анализа. Пишем простой MCP-сервер для трекинга изменений ваших проектов.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 SSG своими руками

В статье покажу, как собрать статический сайт на React без Next.js и прочих фреймворков. Чистый подход с нуля, если хочется или приходится обойтись без лишней магии.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🔊 Определение bpm (beats per minute) в браузере

Расскажу, как я сделал браузерный сервис на React для определения bpm по микрофону. Без тапов и сторонних приложений — только звук и алгоритмы.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
🔐 Делай внутренние инструменты с внешним качеством

Раз работаешь только ты, значит, можно «и так сойдёт»? А потом этот скрипт ломается в самый важный момент.

👉 Совет: относись к своим внутренним тулзам как к продукту. Добавь ошибки, валидацию, минимальный UX. Тебе же потом их запускать в спешке, лучше если они не подведут.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
⚙️ React vs Vue – подробное сравнение и перспективы

Разберём, как изменились React и Vue за 5 лет, оценим их экосистемы и перспективы на фоне развития LLM и AI-агентов. Будет много сравнений, фактов и личных выводов.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👎4
⚙️ CI/CD для чайников — разберитесь, и начните автоматизировать рутину в разработке. Часть 3. Его величество, деплой

Расскажу, как максимально просто организовать автоматический деплой React-приложения через CI/CD: что нужно, какие инструменты понадобятся и как сделать так, чтобы сайт был доступен в интернете.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
⚙️ Пробуем Junie от JetBrains на реальной задаче (или как я попал в рассказ Азимова)

В этой статье проверяю, как справляется новый AI-ассистент Junie от JetBrains с реальной задачей, и случайно оказываюсь в ситуации из рассказа Азимова.

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

Модуль fs в Node.js позволяет работать с файловой системой. Начиная с Node 10+, появился fs.promises, который возвращает Promise вместо использования колбэков.

Это делает код чище и позволяет писать асинхронные операции через async/await

➡️ Пример:

const fs = require('fs/promises');

async function readFile() {
try {
const data = await fs.readFile('example.txt', 'utf8');
console.log(data);
} catch (err) {
console.error('Ошибка чтения файла:', err);
}
}

readFile();


🗣️ В этом примере файл example.txt читается асинхронно. Ошибки обрабатываются через try/catch, код становится линейным и легко читаемым.


Это современный способ работы с файлами в Node.js без "адских вложенных колбэков".

🖥 Подробнее тут
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
👩‍💻 4 типичные ошибки разработчиков Node.js

Растущее комьюнити Node.js - свидетельство надежности и эффективности этого инструмента. Однако не всем удается извлечь из него максимальную выгоду. Рассмотрим самые распространенные ошибки разработчиков Node.js.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
👩‍💻 Пользовательские события CustomEvent

JavaScript CustomEvent расширяют функциональность встроенной системы событий. Проще говоря, они позволяют программистам создавать и обрабатывать события, уникальные для их приложения, и в этой статье мы расскажем о них всё.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
👩‍💻 Как преобразовать Node.js Buffer в String

При преобразовании между Buffer и String может быть указана кодировка символов. Если кодировка не указана, по умолчанию будет использоваться UTF-8

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3
👩‍💻 Дата и время в JavaScript

Учимся работать с датой и временем в JavaScript: разбираемся с определением и способом создания объекта Data, его методами и форматами вывода.

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