Создайте небольшое приложение на 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
Ключевое слово
import
используется для импорта привязок, которые экспортируются другим модулем, а функция require()
используется для загрузки модуля в приложении Node.js. Эти два механизма похожи, но у них есть важные отличия о которых вам следует знать. Мы обсудим их в этой статье.Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Растущее комьюнити Node.js - свидетельство надежности и эффективности этого инструмента. Однако не всем удается извлечь из него максимальную выгоду. Рассмотрим самые распространенные ошибки разработчиков Node.js.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
JavaScript CustomEvent расширяют функциональность встроенной системы событий. Проще говоря, они позволяют программистам создавать и обрабатывать события, уникальные для их приложения, и в этой статье мы расскажем о них всё.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
При преобразовании между Buffer и String может быть указана кодировка символов. Если кодировка не указана, по умолчанию будет использоваться UTF-8
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Создайте приложение на 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: разбираемся с определением и способом создания объекта 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
Бесплатный вебинар «Пишем Автотесты на 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: как на ровном месте, неудачной архитектурой приложения, можно обеспечить себе хронические проблемы производительности.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM