Изучаем NodeJS.
Node или Node.js — программная платформа, основанная на движке V8 (транслирующем JavaScript в машинный код), превращающая JavaScript из узкоспециализированного языка в язык общего назначения. Node.js добавляет возможность JavaScript взаимодействовать с устройствами ввода-вывода через свой API (написанный на C++), подключать другие внешние библиотеки, написанные на разных языках, обеспечивая вызовы к ним из JavaScript-кода. Node.js применяется преимущественно на сервере, выполняя роль веб-сервера, но есть возможность разрабатывать на Node.js и десктопные оконные приложения (при помощи NW.js, AppJS или Electron для Linux, Windows и macOS) и даже программировать микроконтроллеры (например, tessel и espruino). В основе Node.js лежит событийно-ориентированное и асинхронное (или реактивное) программирование с неблокирующим вводом/выводом.
Блок 1. Основый Node.js
1. Старт.
npm init
npm install nodemon -D
2. Базовые сущности. Глобальные объекты и модули.
Объекты:
__dirname
__filename
Импорт в nodeJS:
const userExample = require('./user');
Экспорт в nodeJS:
module.exports = user;
2.Импорт в nodeJS:
const obj = require('./user');
console.log(obj.user);
obj.sayHello();
Экспорт в nodeJS:
module.exports = {
user: user,
sayHello(){
console.log('hello');
}
};
3. Модуль PATH.
__filename // абсолютный путь к файлу.
path.basename(__filename) // метод забирает название файла из абсолютного пути.
path.dirname(__filename) // метод получает абсолютный путь и имя папки где находится файл.
path.extname(__filename) // метод отдает расширение файла.
path.parse(__filename) // массив данных
path.parse(__filename).ext // обращение к конкретному виду данных
path.join(__dirname, 'test', 'second.html') // метод join позволяет соеденить определить определенные строки в один путь (принимает неограниченноеколичество строк). // Первым параметром указываем путь к папке, вторым папку, третим название файла
path.resolve(__dirname, 'test', 'second.html') // тут так же генирируем определенный путь к папке или файлу
Больше методов PATH
4. Модуль FS. (File System)
// Создание папки (если папка создана, то выдает ошибку)
const fs = require('fs');
const path = require('path');
fs.mkdir(path.join(__dirname, 'notes'), (err) => {
if (err) throw err;
console.log('Папка была создана');
});
// Создание нового контента и файла
const fs = require('fs');
const path = require('path');
fs.writeFile(path.join(__dirname, 'notes', 'mynotes.txt'),
'Текст txt файла ',
(err) => {
if (err) throw err;
console.log('Файл был создан');
fs.appendFile( // добавление нового контента в существующий файл
path.join(__dirname, 'notes', 'mynotes.txt'),
'Новый текст txt файла',
err => {
if (err) throw err;
console.log('Файл был изменен');
fs.readFile( // чтение указаного файла
path.join(__dirname, 'notes', 'mynotes.txt'),
'utf-8', // указываем кодировку файла, чтобы норм читалось
(err, data) => {
if (err) throw err;
console.log(data);
console.log(Buffer.from(data).toString()); // указываем параметры файла, чтобы читалось
}
);
}
)
}
);
// Переименование файла
fs.rename(
path.join(__dirname, 'notes', 'mynotes.txt'),
path.join(__dirname, 'notes', 'notes.txt'),
err => {
if (err) throw err;
console.log('Файл переиминован');
}
);
Больше методов File System
5. Модуль OS. (Operation System)
const os = require ('os');
// Платформа
console.log(os.platform());
// Архетиктура
console.log(os.arch());
// Информация
console.log(os.cpus());
// Свободной памяти
console.log(os.freemem());
// Сколько всего памяти
console.log(os.totalmem());
// Корневая директория
console.log(os.homedir());
// Скольеко система работатет
console.log(os.uptime());
6. Модуль Events.
// Модуль Events, позволяющий нам работать и добавлять eventEmitter к приложению
// EventEmitter - представляет собой основной объект реализующий работу с событиями в Node
const EventEmitter = require('events');
d
class Logger extends EventEmitter {
log(message) { // log - это метод
this.emit('message', `${message} ${Date.now()}`) // Функция .emit — отвечает за диспетчеризацию событий конкретного типа //первым параметром в эмит мы передаем название того события, которые мы хотим за сабмитить, вторым параметром передаем данные, которые хотим передать
}
}
const logger = new Logger();
// прослушка события:
logger.on('message', data => { // Функция .on отвечает за прослушивание события конкретного типа
console.log(data);
});
logger.log('Hello');
logger.log('Hello'); // каждый раз вызывая метод log, мы вызываем метод init
// По итогу получаем:
// Hello 1580563003589
// где 1580563003589 - тайм штамп.
// Итого, что нам нужно по итогу понимать:
// нам нужно понимать базовый концепт который был описан выше и важно понимать, что очень многие классы, которые мы будем использовать в будущем, они являются наследниками от EventEmitter'a и поэтому у них можно и эмитить и прослушивать определенные события.
7. Модуль HTTP.
Встроенный модуль HTTP - позволяет создавать свои собственные HTTP сервера.
const http = require ('http');
const server = http.createServer((req, res) => {
console.log(req.url);
res.write(`Hello from NodeJs
`);
res.write(`Hello from NodeJs
`);
res.write(`Hello from NodeJs
`);
res.end(`
Test
`)
});
server.listen(3000, () => {
console.log('Nice! Server is running');
});
Console:
Nice! Server is running
/
/favicon.ico
Result:
Hello from NodeJs
Hello from NodeJs
Hello from NodeJs
Test
Nodemon.
Nodemon - исполььзуется для улучшения процесса разработки и для того, чтобы не перезапускать сервер постоянно при каких-то изменениях.
Добавляем строки в package. json:
"start": "node index.js",
"dev": "nodemon index.js"
Создание простого Web-сервера.
Работа с консолью.
Блок 2. Практика Express.js.
Настройка приложения