Что такое 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 для получения текущего времени. Эти пакеты облегчат процесс.
Читайте также:
- Веб-разработка: основы статического сайта
- Современный backend-разработчик
- Мемоизация как средство ускорения веб-приложений
Читайте нас в Telegram, VK и Дзен
Перевод статьи Furkan Türkoğlu: How to create a Web Server with Nodejs HTTP and FS modules