Promise.withResolvers()
Метод
Promise.withResolvers()
повышает гибкость, позволяя удалённо разрешать или отклонять промисы, упрощая и оптимизируя асинхронный код.Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Визуализация данных — важная часть любого проекта, связанного с аналитикой и обработкой данных. Мы рассмотрим 7 библиотек: Plotly, D3.js, Nivo, Latitude, Apache ECharts, Victory и Chart.js.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Создайте приложение на Node.js, которое принимает путь к папке в качестве аргумента командной строки и создает файл
report.json
, содержащий статистику по этой папке: количество файлов, количество папок, и общий размер всех файлов.Программа должна уметь выводить статистику по папке в консоль и сохранять её в файл.
•
node app.js report /path/to/folder
— создает файл report.json с данными о содержимом папки.•
node app.js print /path/to/folder
— выводит статистику о папке в консоль.Решение задачи
const fs = require('fs');
const path = require('path');
const { promisify } = require('util');
const readdir = promisify(fs.readdir);
const stat = promisify(fs.stat);
const action = process.argv[2];
const folderPath = process.argv[3];
const reportFile = 'report.json';
if (!action || !folderPath) {
console.log('Используйте: node app.js <report|print> <путь к папке>');
process.exit(1);
}
async function analyzeFolder(folder) {
const entries = await readdir(folder, { withFileTypes: true });
let totalSize = 0;
let fileCount = 0;
let folderCount = 0;
for (const entry of entries) {
const fullPath = path.join(folder,entry.name );
if (entry.isDirectory()) {
folderCount++;
const { totalSize: folderSize, fileCount: folderFiles, folderCount: subFolderCount } = await analyzeFolder(fullPath);
totalSize += folderSize;
fileCount += folderFiles;
folderCount += subFolderCount;
} else if (entry.isFile()) {
const fileStats = await stat(fullPath);
fileCount++;
totalSize += fileStats.size;
}
}
return { totalSize, fileCount, folderCount };
}
async function generateReport(folder) {
const stats = await analyzeFolder(folder);
const reportData = {
folder: folder,
files: stats.fileCount,
folders: stats.folderCount,
totalSize: stats.totalSize,
};
fs.writeFile(reportFile, JSON.stringify(reportData, null, 2), (err) => {
if (err) {
console.error('Ошибка при записи отчета:', err);
process.exit(1);
}
console.log(`Отчет сохранен в ${reportFile}`);
});
}
async function printReport(folder) {
const stats = await analyzeFolder(folder);
console.log(`Папка: ${folder}`);
console.log(`Количество файлов: ${stats.fileCount}`);
console.log(`Количество папок: ${stats.folderCount}`);
console.log(`Общий размер файлов: ${stats.totalSize} байт`);
}
if (action === 'report') {
generateReport(folderPath);
} else if (action === 'print') {
printReport(folderPath);
} else {
console.log('Неизвестное действие. Используйте "report" или "print".');
}
Please open Telegram to view this post
VIEW IN TELEGRAM
В рамках этой статьи я опишу создание двух NestJS-модулей с различным способом конфигурирования: утилитарный модуль и бизнес-модуль со своей базой данных.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
JavaScript модули позволяют организовывать код для повторного использования. Существует два метода экспорта: по умолчанию и именованный. В этой статье разбираем экспорт по умолчанию и причины, почему его стоит избегать.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
В многопроцессных приложениях на Node.js иногда нужно организовать обмен сообщениями между процессами. Это полезно, когда ваше приложение использует форк процессов или воркеры для выполнения задач параллельно.
child_process
для создания дочернего процесса и организации обмена сообщениями.const { fork } = require('child_process');
// Запускаем дочерний процесс
const child = fork('child.js');
// Отправляем сообщение дочернему процессу
child.send({ msg: 'Привет, дочерний процесс!' });
// Обрабатываем сообщения от дочернего процесса
child.on('message', (message) => {
console.log('Родитель получил:', message);
});
// Код дочернего процесса (child.js)
process.on('message', (message) => {
console.log('Дочерний процесс получил:', message);
// Отправляем ответ родительскому процессу
process.send({ msg: 'Привет, родительский процесс!' });
});
🗣️ Использование сообщений между процессами полезно для разделения вычислений и повышения производительности.
Please open Telegram to view this post
VIEW IN TELEGRAM
В каждом языке программирования есть циклы. Циклы выполняют операцию (т. е. часть работы) несколько раз, обычно по одному разу для каждого элемента массива или списка, или просто повторяют операцию до тех пор, пока не будет выполнено определённое условие.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Создайте приложение на Node.js, которое принимает путь к текстовому файлу в качестве аргумента командной строки, подсчитывает количество строк, слов и символов в файле, а затем сохраняет результат в
stats.json
. Программа также должна уметь выводить статистику в консоль.Программа должна уметь выводить статистику по папке в консоль и сохранять её в файл.
•
node app.js report /path/to/file.txt
— создает файл stats.json с количеством строк, слов и символов в файле.•
node app.js print /path/to/file.txt
— выводит статистику по файлу в консоль.Решение задачи
const fs = require('fs');
const path = require('path');
const { promisify } = require('util');
const readFile = promisify(fs.readFile);
const action = process.argv[2];
const filePath = process.argv[3];
const reportFile = 'stats.json';
if (!action || !filePath) {
console.log('Используйте: node app.js <report|print> <путь к файлу>');
process.exit(1);
}
async function analyzeFile(file) {
const content = await readFile(file, 'utf8');
const lines = content.split('\n').length;
const words = content.split(/\s+/).filter(Boolean).length;
const chars = content.length;
return { lines, words, chars };
}
async function generateReport(file) {
const stats = await analyzeFile(file);
fs.writeFile(reportFile, JSON.stringify(stats, null, 2), (err) => {
if (err) {
console.error('Ошибка при записи отчета:', err);
process.exit(1);
}
console.log(`Отчет сохранен в ${reportFile}`);
});
}
async function printReport(file) {
const stats = await analyzeFile(file);
console.log(`Файл: ${file}`);
console.log(`Количество строк: ${stats.lines}`);
console.log(`Количество слов: ${stats.words}`);
console.log(`Количество символов: ${stats.chars}`);
}
if (action === 'report') {
generateReport(filePath);
} else if (action === 'print') {
printReport(filePath);
} else {
console.log('Неизвестное действие. Используйте "report" или "print".');
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
• SMS-автоответчик с обновлением статуса: еще один канал связи для клиентов, которым мало интернета и звонков
• Попробуйте Tauri
• Новый оператор безопасного присваивания в JavaScript: ?=
• Как ускорить компонентную frontend-разработку с помощью продуктового подхода: опыт Рунити
• PostgreSQL Antipatterns: валим «слона» — highload на ровном месте
Please open Telegram to view this post
VIEW IN TELEGRAM
Вы знаете в чём разница между exports и module.exports в Node.js? Для начала рассмотрим, что представляет собой объект модуля.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
• Сила лидерского слушания
• Как пройти стажировку бизнес- и системного аналитика и не «сгореть» в персональной преисподней
• «Так и знала, что вы — бывший двоечник!» Самые глупые ошибки моей компьютерной молодости
• Что лучше — оценка рекрутера или подбрасывание монетки?
• Мотивационные стили в обучении: почему вам (возможно) не нужны цели или общение с одногруппниками
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
Антипаттерны не щадят даже лучших.
С 13 по 17 октября пройдет новый сезон Podlodka Techlead Crew “Архитектурные антипаттерны”.
Обсудим ошибки, которые ломают архитектуру, и как их избежать.
В программе:
🛠️ Модульный монолит: убийца микросервисов. Какие плюсы микросервисов реально доступны и без них и как монолит снижает сложность и экономит ресурс — Денис Цветцих
📑 Дизайн-доки — инженерная культура в FAANG. Как обсуждать архитектуру до кода, избегать холиваров и делать дизайн-доки полезными — Дмитрий Волыхин
⚡ Error Handling: от боли к порядку. Стандарты обработки ошибок вместо хаоса при интеграциях через API — Евгений Лукьянов
🔍 Круглый стол. Архитектурные антипаттерны: как вовремя распознать. Первые звоночки анти‑паттернов, практические примеры и стратегии их предотвращения — Алексей Кашин, Салих Фахрутдинов, Андрей Шарапов
🧠 Всё, что обсудим, реально применимо и пригодится уже в следующем спринте
Подробности и билеты: https://podlodka.io/techcrew
С 13 по 17 октября пройдет новый сезон Podlodka Techlead Crew “Архитектурные антипаттерны”.
Обсудим ошибки, которые ломают архитектуру, и как их избежать.
В программе:
🛠️ Модульный монолит: убийца микросервисов. Какие плюсы микросервисов реально доступны и без них и как монолит снижает сложность и экономит ресурс — Денис Цветцих
📑 Дизайн-доки — инженерная культура в FAANG. Как обсуждать архитектуру до кода, избегать холиваров и делать дизайн-доки полезными — Дмитрий Волыхин
⚡ Error Handling: от боли к порядку. Стандарты обработки ошибок вместо хаоса при интеграциях через API — Евгений Лукьянов
🔍 Круглый стол. Архитектурные антипаттерны: как вовремя распознать. Первые звоночки анти‑паттернов, практические примеры и стратегии их предотвращения — Алексей Кашин, Салих Фахрутдинов, Андрей Шарапов
🧠 Всё, что обсудим, реально применимо и пригодится уже в следующем спринте
Подробности и билеты: https://podlodka.io/techcrew
Предлагаем руководство по использованию TypeScript для безопасной для типов сериализации и десериализации данных в формате JSON. Освоение этой стратегии позволит своевременно обнаруживать потенциальные ошибки во время разработки приложения.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Сегодня мы рассмотрим одну из тем, которая, как ни странно, остаётся недооценённой — JSON Schema. Если ты аналитик (или хочешь им быть) и в твоей работе часто мелькают JSON-файлы, то наверняка знаешь, как сложно порой бывает держать всё это под контролем. В этой статье мы разберём всё, что тебе нужно знать про JSON Schema.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
В серверных приложениях на Node.js правильное управление ошибками является критически важным для обеспечения стабильности и безопасности. Ошибки могут возникать в асинхронных операциях, таких как работа с базами данных или сторонними API.
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, чтобы не допустить краха сервера при возникновении исключений в асинхронных запросах.
Please open Telegram to view this post
VIEW IN TELEGRAM
👎4🐳1
Советы по написанию короткого, лаконичного и чистого кода на JavaScript
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2
Файл utils2.js, функция handleData, переменная x. Ты и сам не понимаешь, что это значит.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4⚡2👍1🔥1
В статье рассматриваются проблемы, которые создают рекурсивные зависимости на фронте. Обсуждаются способы их обнаружения и решения, ведь часто разработчики даже не знают, что в проекте есть циклические зависимости.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
• Быстрее пули: как найти счастье с PostgreSQL
• Куда движется Laravel? Обзор интервью с Taylor Otwell
• Nexus-IoC — хорошо знакомый незнакомец в мире TypeScript и DI
• Как сделать React Server Components в Electron с помощью Next.js и без открытых портов
• 10 не самых очевидных причин, чтобы уволиться
Please open Telegram to view this post
VIEW IN TELEGRAM
Сегодня мы рассмотрим, как обнаружить и реагировать на изменение атрибутов веб-компонента.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM