Что такое Node.js?

Node.js  —  это рабочая среда js, которая работает асинхронно, в отличие от js.

В этой статье вы узнаете, как создать веб-сервер и записать ответы в JSON-файл. Будем использовать модуль HTTP для создания веб-сервера и модуль fs для регистрации ответов в файл. Поскольку HTTP и fs являются основными модулями NodeJS, вам не придется устанавливать сторонние зависимости.

Что такое веб-сервер?

Веб-сервер включает в себя несколько частей, которые управляют доступом пользователей к размещенным файлам. HTTP-сервер  —  это программное обеспечение, которое понимает URL-адреса (веб-адреса) и HTTP (протокол, используемый браузером для просмотра страниц). Доступ к HTTP-серверу можно получить через доменные имена сайтов, которые на нем хранятся. HTTP-сервер доставляет контент этих сайтов на устройство конечного пользователя.

Что такое HTTP-запрос?

HTTP-запрос выполняется клиентом на хост типа named, который расположен на сервере. Цель запроса  —  получить доступ к ресурсу на сервере.

Чтобы сделать запрос, клиент использует компоненты URL (Uniform Resource Locator, унифицированный локатор ресурсов), которые содержат информацию, необходимую для доступа к ресурсу.

Теперь от теоретических сведений о веб-серверах и HTTP-запросах перейдем к написанию кода.

Импортируем HTTP-модуль и создаем сервер методом createServer. Этот метод принимает два параметра: запрос и ответ. Получаем запрашиваемый URL с помощью request.url. Создаем блок switch case или оператор if-else для запрашиваемых URL. Затем создаем ответ на эти запросы.

// Импорт основных модулей для создания веб-сервера
const http = require("http");

// Созданный http-сервер
const server = http.createServer((req, res) => {
const url = req.url;

// Создание ответов на запросы к различным url
if (url === "/") {
res.writeHead(200, { "Content-Type": "text/html" });
res.write("You are at home page");
} else if (url === "/about") {
res.writeHead(200, { "Content-Type": "text/html" });
res.write("You are at about page");
} else if (url === "/contact") {
res.writeHead(200, { "Content-Type": "text/html" });
res.write("You are at contact page");
} else {
res.writeHead(404, { "Content-Type": "text/html" });
res.write("Page not found");
}
res.end();
});

// Создание порта в виде переменной
const port = 4000;

// Прослушивание порта на предмет запросов
server.listen(port, () => {
console.log(`Server started at port ${port}`);
});

Получить текущее время позволит приведенный ниже код:

// Получение текущего времени для операций логирования
var today = new Date();
var date = today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate();
var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
var currentTime = date + " " + time;

Теперь добавим модуль fs для логирования запросов в JSON-файле. Можно использовать для этого разные методы. fs.appendFile создаст новый файл, если он не был создан ранее, и добавит в него логи. fs.writeFile создаст новый файл, если он не был создан ранее, и будет выполнять этот процесс для каждого запроса по умолчанию, так что старые логи будут удалены. Можно использовать опцию {flag: “a”} для решения этой проблемы.

// Импорт основных модулей для создания сервера и операций логирования
const http = require("http");
const fs = require("fs");

// Созданный http-сервер
const server = http.createServer((req, res) => {
const url = req.url;

// Получение текущего времени для операций логирования

// Оператор if else для запросов

// Логирование каждого запроса, кода состояния и текущего времени в json-файл с помощью метода writeFile
fs.writeFile(
`logFile.json`,
`\n{"Request Url": "${url}"\n"Status": "${res.statusCode}"\n"Request Time": "${currentTime}"}\n`,
{ flag: "a" },
(err) => {
if (err) console.log(err);
}
);
res.end();
});

// Прослушивание порта

Можно также использовать объект js date для получения текущего времени после выполнения запроса. Создайте JSON-файл и вставьте в него URL-адрес запроса, статус и текущее время.

Кроме того, можно использовать различные пакеты для сохранения логов, такие как Winston, Bunyan, Pino, Morgan и Node-loggly.

Запустить этот сервер позволит команда node server.

Есть множество способов создания веб-сервера с помощью NodeJS. Вы можете воспользоваться ExpressJS для этого и пакетом moment для получения текущего времени. Эти пакеты облегчат процесс.

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Furkan Türkoğlu: How to create a Web Server with Nodejs HTTP and FS modules

Предыдущая статьяТри библиотеки R, которые должен знать каждый специалист по данным
Следующая статьяКак создать цифровые часы с помощью Moment.js