Класс «Server
»
Основной класс фреймворка, предоставляющий функциональность для обработки HTTP-запросов включая поддержку протокола HTTPS.
Открытые статические методы
Инициализирует серверное приложение настройками, передаваемыми через единственный параметр, затем запускает это приложение. В простейшем случае, код будет подобным следующему:
import { Server, Request, Response, ProtocolDependentDefaultPorts } from "@yamato-daiwa/backend";
import { HTTP_Methods } from "@yamato-daiwa/es-extensions";
Server.initializeAndStart({
IP_Address: "127.0.0.1",
HTTP: { port: ProtocolDependentDefaultPorts.HTTP },
routing: [
{
route: { HTTP_Method: HTTP_Methods.get, pathTemplate: "/" },
async handler(request: Request, response: Response): Promise<void> {
return response.submitWithSuccess({ HTML_Content: "<h1>Hello, world!</h1>" });
}
}
]
});
Инициализирует серверное приложение настройками, передаваемыми через единственный
параметр, но при этом не запускает его.
Запуск можно осуществить позднее с помощью нестатического метода
start
.
import { Server, Request, Response, ProtocolDependentDefaultPorts } from "@yamato-daiwa/backend";
import { HTTP_Methods } from "@yamato-daiwa/es-extensions";
const serverApplication: Server = Server.initialize({
IP_Address: "127.0.0.1",
HTTP: { port: ProtocolDependentDefaultPorts.HTTP },
routing: [
{
route: { HTTP_Method: HTTP_Methods.get, pathTemplate: "/" },
async handler(request: Request, response: Response): Promise<void> {
return response.submitWithSuccess({ HTML_Content: "<h1>Hello, world!</h1>" });
}
}
]
});
// ...
serverApplication.start();
Открытые методы экземпляра
Запускает экземпляр серверного приложения, представленный экземпляром класса
Server
.
Этот экземпляр должен быть предварительно создан с помощью
статического метода initialize
.
import { Server, Request, Response, ProtocolDependentDefaultPorts } from "@yamato-daiwa/backend";
import { HTTP_Methods } from "@yamato-daiwa/es-extensions";
const serverApplication: Server = Server.initialize({
IP_Address: "127.0.0.1",
HTTP: { port: ProtocolDependentDefaultPorts.HTTP },
routing: [
{
route: { HTTP_Method: HTTP_Methods.get, pathTemplate: "/" },
async handler(request: Request, response: Response): Promise<void> {
return response.submitWithSuccess({ HTML_Content: "<h1>Hello, world!</h1>" });
}
}
]
});
// ...
serverApplication.start();
Связанные типы
Server.RawConfig
- IP_Address
- Русскоязычное наименование
- IP-адрес
- Обязательное
- Да
- Тип
- HTTP
- Русскоязычное наименование
- Настройки для протокола HTTP
- Обязательное
- Нет
- Тип
- HTTPS
- Русскоязычное наименование
- Настройки для протокола HTTPS
- Обязательное
- Нет
- Тип
Имеет объектный тип, спроектированный так, что обязательными свойствами сделано всё то, о чем инженер обязан отдавать себе отчёт перед запуском серверного приложения.
IP_Address
- Русскоязычное наименование
- IP-адрес
- Обязательное
- Да
- Тип
Обязательное свойство; должно содержать валидный IP-адрес, по которому будет осуществляться прослушивание входящих HTTP-запросов. В простейшем случае с одним обработчиком запросов и без поддержки протокола HTTPS минимальный пример будет:
import { Server, Request, Response, ProtocolDependentDefaultPorts } from "@yamato-daiwa/backend";
import { HTTP_Methods } from "@yamato-daiwa/es-extensions";
Server.initializeAndStart({
IP_Address: "127.0.0.1",
HTTP: { port: ProtocolDependentDefaultPorts.HTTP },
routing: [
{
route: { HTTP_Method: HTTP_Methods.get, pathTemplate: "/" },
async handler(request: Request, response: Response): Promise<void> {
return response.submitWithSuccess({ HTML_Content: "<h1>Hello, world!</h1>" });
}
}
]
});
HTTP
- Русскоязычное наименование
- Настройки для протокола HTTP
- Обязательное
- Нет
- Тип
- port
- Русскоязычное наименование
- Номер порта
- Обязательное
- Да
- Тип
- number
Укажите эту группу настроек, если планируете поддерживать протокол HTTP.
На данный момент единственной настройкой этой группы является номер HTTP-порта
(свойство port
).
Оно сделано обязательным, чтобы инженер осознавал, по какому порту будут
прослушиваться входящие HTTP-запросы.
Если Вас устраивает порт по умолчанию для протокола HTTP, то можете воспользоваться
перечислением ProtocolDependentDefaultPorts
:
import { Server, Request, Response, ProtocolDependentDefaultPorts } from "@yamato-daiwa/backend";
import { HTTP_Methods } from "@yamato-daiwa/es-extensions";
Server.initializeAndStart({
IP_Address: "127.0.0.1",
HTTP: { port: ProtocolDependentDefaultPorts.HTTP },
routing: [
{
route: { HTTP_Method: HTTP_Methods.get, pathTemplate: "/" },
async handler(request: Request, response: Response): Promise<void> {
return response.submitWithSuccess({ HTML_Content: "<h1>Hello, world!</h1>" });
}
}
]
});
HTTPS
- Русскоязычное наименование
- Настройки для протокола HTTPS
- Обязательное
- Нет
- Тип
- port
- Русскоязычное наименование
- Номер порта
- Обязательное
- Да
- Тип
- number
- SSL_KeyFileRelativeOrAbsolutePath
- Русскоязычное наименование
- Относительный или абсолютный путь к SLL-ключу
- Обязательное
- Нет
- Обязательное если
- Свойство «SSL_Key» не указано
- Тип
- string
- SSL_Key
- Русскоязычное наименование
- SLL-ключ
- Обязательное
- Нет
- Тип
- string
- SSL_CertificateFileRelativeOrAbsolutePath
- Русскоязычное наименование
- Относительный или абсолютный путь к SLL-сертификату
- Обязательное если
- Свойство «SSL_CertificateFileRelativeOrAbsolutePath» не указано
- Тип
- string
- SSL_Certificate
- Русскоязычное наименование
- SLL-ключ
- Обязательное
- Нет
- Тип
- string
Укажите эту группу настроек, если планируете поддерживать протокол HTTPS. Согласно современным требованиями к кибербезопасности, следует использовать именно этот протокол.
На данный момент всего имеется 5 свойств, среди которых 2 пары несовместимых. Помимо номера HTTPS-порта, необходимо указать SSL-сертификат и SSL-ключ — либо в виде пути (относительного или абсолютного, но последний надёжнее), либо в в виде строки с представляющей их последовательностью символов. Ниже представлен простейший пример для каждого из этих случаев:
import { Server, Request, Response, ProtocolDependentDefaultPorts } from "@yamato-daiwa/backend";
import { HTTP_Methods } from "@yamato-daiwa/es-extensions";
import Path from "path";
Server.initializeAndStart({
IP_Address: "127.0.0.1",
HTTPS: {
port: ProtocolDependentDefaultPorts.HTTPS,
SSL_CertificateFileRelativeOrAbsolutePath: Path.resolve(__dirname, "./SSL/SSL_Certificate.pem"),
SSL_KeyFileRelativeOrAbsolutePath: Path.resolve(__dirname, "./SSL/SSL_Key.pem")
},
routing: [
{
route: { HTTP_Method: HTTP_Methods.get, pathTemplate: "/" },
async handler(_request: Request, response: Response): Promise<void> {
return response.submitWithSuccess({ HTML_Content: "<h1>Hello, world!</h1>" });
}
}
]
});
import { Server, Request, Response, ProtocolDependentDefaultPorts } from "@yamato-daiwa/backend";
import { HTTP_Methods } from "@yamato-daiwa/es-extensions";
import Path from "path";
import { secrets } from "docker-secret";
Server.initializeAndStart({
IP_Address: "127.0.0.1",
HTTPS: {
port: ProtocolDependentDefaultPorts.HTTPS,
SSL_Key: secrets.SSL_KEY,
SSL_Certificate: secrets.SSL_CERTIFICATE
},
routing: [
{
route: { HTTP_Method: HTTP_Methods.get, pathTemplate: "/" },
async handler(_request: Request, response: Response): Promise<void> {
return response.submitWithSuccess({ HTML_Content: "<h1>Hello, world!</h1>" });
}
}
]
});
SSL-ключ и SSL-сертификат, разумеется, следует заготовить перед запуском приложения.