Давайте узнаем, как разместить локальный сервер с помощью JavaScript.

Прежде чем мы начнем, необходимо обратить внимание на несколько важных моментов:

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

Node.js — это серверная среда выполнения JavaScript с открытым исходным кодом, которая позволяет запускать код JavaScript вне веб-браузера. Он использует движок JavaScript Chrome V8 для выполнения кода JavaScript на сервере, обеспечивая управляемую событиями неблокирующую модель ввода-вывода (ввода/вывода), которая делает его эффективным и масштабируемым для создания сетевых приложений.

Установка Node JS на вашем компьютере

Пожалуйста, посетите веб-сайт Node JS, чтобы загрузить последнюю версию (версию LTS)

После установки вы можете проверить, была ли установка успешной или нет, используя следующую команду в CMD:

node --version

Что такое NPM?

Node Package Manager — это менеджер пакетов для Node.js, который позволяет разработчикам легко управлять повторно используемым кодом JavaScript и делиться им. С помощью npm разработчики могут устанавливать, обновлять и удалять пакеты или библиотеки, а также управлять их зависимостями.

Вместе с установкой узла устанавливается и npm. Чтобы проверить, была ли установка успешной или нет, используйте следующую команду в CMD:

npm --version

Теперь давайте начнем с настройки проекта.

Шаг 1:

Откройте код Visual Studio и откройте новый терминал.

Шаг 2:

Теперь выполните приведенную ниже команду, чтобы инициализировать проект Node.js с помощью терминала. Команда -y используется для настройки вашего проекта с использованием конфигурации по умолчанию.

npm init -y

Эта команда автоматически создает файл package.json с некоторыми значениями по умолчанию в формате JSON.

Ниже вы увидите такой файл:

{
  "name": "tutorial",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

Шаг 3.

Теперь давайте создадим файл сценария, назвав его index.js. Здесь мы настроим локальный сервер вручную.

const httpInstance = require('http');
const portNumber = 8080;

// Create a server instance
const httpServer = httpInstance.createServer((req, res) => {

    // Write a response to the client
    res.write('Response from server');
    res.statusCode = 200;

    // End the response
    res.end();
});

// Setup the server to listen on port 8080
httpServer.listen(portNumber, () => {
    console.log('Server is listening on port ' + portNumber);
});

Шаг 4:

Теперь запустите следующую команду в терминале:

node index.js

Когда вы запускаете вышеуказанную команду, она выполняет файл JavaScript index.js, используя среду выполнения Node.js.

Шаг 5.

После запуска команды, если вы проверите браузер, используя URL-адрес: http://localhost:8080/, он будет выглядеть следующим образом:

Теперь добавим HTML-шаблоны, как показано ниже:

Далее вы также можете создавать маршруты API. Давайте посмотрим ниже:

const httpInstance = require('http');
const httpStatusInstance = require('http-status-codes');
const fsInstance = require('fs');
const portNumber = 8080;

// Create a server instance
const httpServer = httpInstance.createServer((req, res) => {
    if (req.url === '/page1') {
        // Write an html response to the client
        res.writeHead(httpStatusInstance.StatusCodes.OK, {
            "Content-Type": "text/html"
        });
        readFile(redirectToHtml(`pages/page1`), res);
    } else if (req.url === '/page2') {
        // Write an html response to the client
        res.writeHead(httpStatusInstance.StatusCodes.OK, {
            "Content-Type": "text/html"
        });
        readFile(redirectToHtml(`pages/page2`), res);
    } else {
        // Write an html response to the client
        res.writeHead(httpStatusInstance.StatusCodes.OK, {
            "Content-Type": "text/html"
        });
        readFile(redirectToHtml(`index`), res);
    }
});

// Concat the url with `html` extension
const redirectToHtml = (url) => {
    return `${url}.html`;
};

// Read file
const readFile = (file_path, res) => {
    if (fsInstance.existsSync(file_path)) {
        fsInstance.readFile(file_path, (error, data) => {
            if (error) {
                console.log(error);
                handleError(res);
                return;
            }
            res.write(data);
            res.end();
        });
    } else {
        handleError(res);
    }
};

const handleError = res => {
    res.writeHead(httpStatusInstance.StatusCodes.NOT_FOUND, {
        "Content-Type": "text/html"
    });
    res.write(`<h1>HTML file not found!</h1>`);
    res.end();
};

// Setup the server to listen on port 8080
httpServer.listen(portNumber, () => {
    console.log(`Server is listening on port ${portNumber}`);
});

В браузере это выглядит так:

Вы должны внести изменения в index.html, добавив новый скрипт для обработки события нажатия кнопки.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- <script src='action.js'></script> -->
</head>

<body>
    <b>Please select a router URL from - (1)
        <button style="cursor: pointer" id="page1">Page 1</button>
        or (2)
        <button style="cursor: pointer" id="page2">Page 2</button></b>
</body>
<script type="text/javascript">
    document.getElementById('page1').addEventListener('click', function () {
        console.log('page1 clicked');
        window.open('/page1', '_self')
    })

    document.getElementById('page2').addEventListener('click', function () {
        console.log('page2 clicked');
        window.open('/page2', '_self')
    })
</script>

</html>

Давайте проверим это в действии:

Что такое Nodemon?

Возможно, вы сталкивались с ручным перезапуском терминала при изменении кода. Итак, чтобы избежать подобных проблем, вы можете использовать Nodemon.

Nodemon — это инструмент, который помогает в разработке приложений Node.js, автоматически перезапуская сервер всякий раз, когда в исходный код вносятся изменения. Это особенно полезно в процессе разработки, так как устраняет необходимость вручную перезапускать сервер после внесения изменений.

Как установить Nodemon?

Вы можете установить Nodemon на свой компьютер глобально или локально в конкретном проекте в зависимости от требований проекта.

Вы можете использовать следующие команды в терминале:

// Globally
npm install -g nodemon

// Locally
npm install nodemon --save-dev

Теперь вместо node index.js можно начать использовать команду nodemon index.js.

Что такое package.json?

Возможно, вы видели файл с именем package.json при инициализации проекта Node.js с помощью команды npm init -y.

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

{
  "name": "tutorial",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "http-status-codes": "^2.2.0"
  }
}

Что такое package-lock.json?

Этот файл создается вместе с файлом package.json. Он служит файлом блокировки, обеспечивающим детерминированное разрешение зависимостей и согласованную установку пакетов в разных средах. Этот файл включает не только прямые зависимости, но и все транзитивные зависимости (зависимости внутри зависимостей), требуемые проектом.

Что такое node_modules?

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

Когда вы добавляете зависимость пакета в свой проект, используя npm install <package name> . npm загружает пакет из реестра npm и помещает его в каталог node_modules. Каталог node_modules действует как локальный репозиторий для этих пакетов. Вы можете вызвать эти библиотеки, используя ключевые слова require или import в файле скрипта.

Вы увидите список пакетов, которые вы использовали в приведенном выше исходном коде. Вы сможете увидеть добавленную библиотеку в зависимостях файла package.json.

Исходный код находится здесь:



Выводы:

В этой статье мы узнали о том, как настроить локальный сервер для проекта node.js, не используя среду Express, а используя ванильный JavaScript. Позже я планирую написать статью о том, как настроить локальный сервер с помощью Express framework.

Я рад, что мы дошли до конца этой статьи. Надеюсь, вам понравилось, если вы найдете эту статью полезной, пожалуйста, хлопните в ладоши и не стесняйтесь поделиться статьей.

Узнать больше о:

  1. Автономный компонент Angular
  2. Как включить живой сервер с помощью VS Code
  3. Как разместить локальный сервер с помощью Express framework