Node.JS [ru] | Серверный JavaScript
11.4K subscribers
90 photos
5 videos
25 files
3.23K 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
👩‍💻 Задачка по NodeJS

Создайте небольшое приложение на Node.js, которое симулирует простой чат. Программа должна принимать два аргумента командной строки: действие (send, history) и сообщение. Программа должна сохранять все сообщения в текстовом файле (chat.txt) и уметь добавлять новые сообщения, а также выводить историю чата.

➡️ Пример:

node app.js send "Привет, как дела?" — добавляет сообщение "Привет, как дела?" в файл. • • node app.js history — выводит историю всех сообщений из файла.

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

const fs = require('fs');
const action = process.argv[2];
const message = process.argv[3];
const filePath = 'chat.txt';

if (!action) {
console.log('Используйте: node app.js <send|history> [message]');
process.exit(1);
}

// Функция для добавления нового сообщения
function sendMessage(message) {
const timestamp = new Date().toLocaleString();
const formattedMessage = `[${timestamp}] ${message}`;

fs.appendFile(filePath, `${formattedMessage}\n`, (err) => {
if (err) {
console.error('Ошибка при отправке сообщения:', err);
process.exit(1);
}
console.log('Сообщение отправлено.');
});
}

// Функция для вывода истории сообщений
function showHistory() {
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.error('Ошибка чтения файла:', err);
process.exit(1);
}

const messages = data.trim().split('\n');
if (messages.length === 0 || (messages.length === 1 && messages[0] === '')) {
console.log('История чата пуста.');
} else {
console.log('История чата:');
messages.forEach((msg) => {
console.log(msg);
});
}
});
}

// Логика обработки команд
if (action === 'send') {
if (!message) {
console.log('Введите сообщение для отправки.');
} else {
sendMessage(message);
}
} else if (action === 'history') {
showHistory();
} else {
console.log('Неизвестное действие. Используйте "send" или "history".');
}
Please open Telegram to view this post
VIEW IN TELEGRAM
2
👩‍💻 JavaScript: различие между require и import

Ключевое слово import используется для импорта привязок, которые экспортируются другим модулем, а функция require() используется для загрузки модуля в приложении Node.js. Эти два механизма похожи, но у них есть важные отличия о которых вам следует знать. Мы обсудим их в этой статье.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
👩‍💻 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
👩‍💻 Как преобразовать Node.js Buffer в String

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

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

Создайте приложение на Node.js, которое принимает URL в качестве аргумента командной строки, загружает HTML-контент по этому URL и сохраняет его в файл page.html. Программа должна также уметь выводить размер загруженного HTML-контента в байтах.

➡️ Пример:

node app.js download "https://example.com" — загружает страницу по указанному URL и сохраняет в файл page.html.
node app.js size "https://example.com" — выводит размер HTML-контента, загруженного по URL.

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

const fs = require('fs');
const https = require('https');
const url = process.argv[3];
const action = process.argv[2];
const filePath = 'page.html';

if (!action || !url) {
console.log('Используйте: node app.js <download|size> <URL>');
process.exit(1);
}

function downloadPage(url) {
https.get(url, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});

res.on('end', () => {
fs.writeFile(filePath, data, (err) => {
if (err) {
console.error('Ошибка при сохранении страницы:', err);
process.exit(1);
}
console.log('Страница загружена и сохранена в page.html');
});
});
}).on('error', (err) => {
console.error('Ошибка загрузки страницы:', err);
process.exit(1);
});
}

function getPageSize(url) {
https.get(url, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});

res.on('end', () => {
console.log(`Размер HTML-контента: ${Buffer.byteLength(data, 'utf8')} байт`);
});
}).on('error', (err) => {
console.error('Ошибка загрузки страницы:', err);
process.exit(1);
});
}

if (action === 'download') {
downloadPage(url);
} else if (action === 'size') {
getPageSize(url);
} else {
console.log('Неизвестное действие. Используйте "download" или "size".');
}
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👎5😁2
👩‍💻 Дата и время в JavaScript

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
⚡️Уже работаешь с Vue, но автотесты и UI-компоненты всё ещё вызывают стресс? Пора действовать! Записывайся на вебинары, которые проходят в рамках курса «Vue.js разработчик».

Бесплатный вебинар
«Пишем Автотесты на Vue.js»
🗓 9 октября, 20:00

На вебинаре:
• Компонентное, 2E2, Unit-тестирование — разложим по полочкам
• Библиотеки Vue: Cypress и Vitest — разберём на практике
• Напишем первые автотесты — легко и без страха

Для разработчиков, которые хотят освоить автотесты во Vue и прокачать навыки, которые пригодятся на любых проектах.

Бесплатный вебинар «Почему во Vue проще: интерактивные UI-компоненты за минуты»
🗓 22 октября, 20:00

На вебинаре:
• Модальные окна, слайдеры, выпадающие меню — делаем с нуля
• Реактивность Vue в действии — управляем состоянием и анимацией
• Почему Vue быстрее и проще, чем React для UI

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

Записаться на вебинары: https://vk.cc/cQ0z2g

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
1
⚙️ PostgreSQL Antipatterns: валим «слона» — highload на ровном месте

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

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