Цитата из документации:
Nest предоставляет готовую архитектуру приложений, которая позволяет разработчикам и командам создавать легко проверяемые, масштабируемые, слабосвязанные и легко поддерживаемые приложения.Nest построен на шаблоне проектирования, называемом внедрением зависимостей.Архитектура во многом вдохновлена Angular.
Посмотрим, как это реализовано в Nest и как это повлияет на остальной код. Для начала давайте рассмотрим простейший код запуска приложенияnesjs из документации: main.ts
Так.import { NestFactory } from "@nestjs/core"; import { AppModule } from ".
/app.module"; async function bootstrap() { const app = await NestFactory.create(AppModule); await app.listen(3000); } bootstrap();
ГнездоФабрика основной класс гнезда — это то, с чего все начинается.
Его метод создавать сканирует существующие модули, доступные в дереве зависимостей из корневого модуля AppModule, после чего сканирует зависимости полученных модулей в виде контроллеров, сервисов и других модулей и добавляет всё это в контейнер.
После сканирования возвращает экземпляр приложения.
При запуске метода прослушивания сервер инициализируется и регистрируются маршрутизаторы, созданные в контроллере, с необходимыми обратными вызовами для каждого, которые уже хранятся в контейнере.
К созданию такого функционала мы подойдем чуть позже, но сначала посмотрим, какой у нас контроллер, провайдер и модуль.
app.controller.ts import { Controller, Get, Post, Body, Param } from 'nestjs/common';
import { AppService } from '.
/app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
@Post('body/:id')
recieveBody(@Body() data: { recieveData: string }, @Param('id') id: string) {
return 'body: ' + data.recieveData + ' has been recieved and id: ' + id;
}
}
Что интересно в этом коде, так это то, что при создании методов запроса мы просто присоединяем к функциям декораторы, которые становятся обратными вызовами для маршрутизаторов.
Мы не знаем, когда и как именно они зарегистрированы, нам не нужно думать о реализации, мы просто следуем заданной архитектуре.
Мы говорим, что хотим сделать, а не как, то есть, как пользователи Nest, мы используем декларативный подход. Соответственно, мы реализуем этот функционал в этой статье.
Существует также зависимость AppService, которую Nest реализует самостоятельно.
Для нас это рабочий код. Зависимости в Nest разрешаются по типам, и мы рассмотрим, как это сделать.
app.service.ts import { Injectable } from 'nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
Здесь мы видим декоратор Injectable, который, как описано в документации, определяет AppService как класс, которым может управлять контейнер Nest, что не совсем верно.
Все, что он на самом деле делает, это добавляет метаданные о времени жизни класса.
По умолчанию это время жизни приложения, и сама Nest не рекомендует менять это поведение.
Поэтому, если вы не хотите это менять, то Injectable можно опустить.
И контейнер Nest может этим управлять только в том случае, если он присутствует в провайдерах модуля, в котором он используется.
app.module.ts import { Module } from 'nestjs/common';
import { AppController } from '.
/app.controller'; import { AppService } from '.
/app.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
Так.
возвращаясь к main.ts , давайте реализуем ГнездоФабрика Сорт. Стоит отметить, что некоторые вспомогательные функции, такие как проверка на null и т.п.
, а также интерфейсы в статье будут опущены, но будут в исходном коде.
.
/core/nest-factory.ts import { NestApplication } from ".
/nest-application"; import { NestContainer } from ".
/injector/container"; import { InstanceLoader } from ".
/injector/instance-loader"; import { DependenciesScanner } from ".
/scanner"; import { ExpressAdapter } from '.
/platform-express/express.adapter';
export class NestFactoryStatic {
public async create(module: any) {
const container = new NestContainer();
Теги: #JavaScript #Nest #node.js #typescript #исходный код
-
Защита Бренда Доменного Имени
19 Oct, 24 -
Аэронавигация
19 Oct, 24 -
Частицы-Партнеры Калуцы-Клейна, Часть 2
19 Oct, 24 -
Финальный Хакатон Конкурса Budgetapps
19 Oct, 24