Пишемnest.js С Нуля На Машинописном Языке

Цитата из документации:

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

Архитектура во многом вдохновлена Angular.

Nest построен на шаблоне проектирования, называемом внедрением зависимостей.

Посмотрим, как это реализовано в 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 #исходный код

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.