Баннер мобильный (3) Пройти тест

NestJS

Глоссарий

26 марта 2023

Поделиться

Скопировано

Содержание

    NestJS — это фреймворк, который ускоряет и упрощает разработку масштабируемых серверных приложений на основе программной платформы Node.js.

    Он использует прогрессивный JavaScript, полностью поддерживает TypeScript и совмещает в себе три парадигмы (концепции) программирования:

    • объектно-ориентированную;
    • функциональную;
    • функционально-реактивную. 
    Официальный сайт фреймворка

    Первая версия фреймворка NestJS вышла в 2017 году. Его функциональность превзошла возможности Express.js, предыдущего решения для работы с платформой Node.js. Фреймворк, созданный польским разработчиком Камилем Мысливецем:

    1. Обеспечивает приложению четкую, понятную и функциональную структуру, соответствующую всем принципам чистой архитектуры. Такое приложение работает стабильно, и его можно легко расширять и масштабировать;
    2. Позволяет использовать при разработке любые сторонние библиотеки;
    3. Подключает к Node.js любые базы данных и сервисы;
    4. Ускоряет процесс разработки и упрощает поддержку готового приложения. 

    Создание проекта в NestJS

    Разработчик взаимодействует с NestJS с помощью консольной утилиты Nest CLI. Она автоматизирует все базовые операции и ускоряет процесс работы. Например, для автоматического создания структуры нового проекта достаточно выполнить команды:

    npm i -g @nestjs/cli

    nest new my-first-project

    В результате появится папка my-first-project. Новый JavaScript-проект можно также создать клонированием стартового:

    git clone https://github.com/nestjs/javascript-starter.git project

    cd project

    npm install

    npm run start

    Для создания TypeScript-проекта нужно заменить javascript-starter.git в первой строке на typescript-starter.git. Клонированный стартовый проект будет доступен в браузере по адресу http://localhost:3000/.

    NestJS самостоятельно устанавливает зависимости, а при добавлении новых сервисов и контроллеров распределяет их по директориям и автоматически подключает к соответствующим модулям приложения. Кроме того, фреймворк поддерживает сокращенные команды. Например, полные команды для создания контроллера и сервиса записей блога posts выглядят так:

    nest generate controller posts

    nest generate service posts

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

    nest g c posts

    nest g s posts

    Новые контроллеры NestJS размещает в папке src:

    src/posts

    ├── posts.controller.spec.ts

    └── posts.controller.ts

    Помимо генерации контроллеров и сервисов, консольная утилита NestJS поддерживает создание модулей, библиотек и рабочих пространств, состоящих из множества проектов.

    NestJS автоматически создает структуру проектов

    Концепция декораторов

    Фреймворк NestJS широко использует концепцию декораторов. Декоратор — это способ «оборачивания» функций. Такой прием позволяет статически или динамически изменять и дополнять поведение отдельных объектов класса так, чтобы изменения не затрагивали другие его объекты.

    Декораторы могут применяться для обозначения модулей, контроллеров и сервисов:

    • @Module();
    • @Controller(‘new-controller’);
    • @Injectable().

    Для определения HTTP-методов конечной точки используют декораторы @Get(), @Post(), @Put(), @Delete() и так далее. Также фреймворк позволяет разработчику применять собственные декораторы:

    import { createParamDecorator } from ‘@nestjs/common’;
    export const Blog = createParamDecorator((data, req) => {
    return req.blog;
    });
    @Get()
    async findOne(@Blog() blog: BlogEntity) {
    console.log({ blog });
    }

    Работа с базами данных

    Фреймворк NestJS позволяет подключать к проекту реляционные и нереляционные базы данных. Подключение производится так же, как при использовании фреймворков Express или Fastify. Если разработчик, например, выберет базу данных MongoDB, в его распоряжении будет пакет @nestjs/mongoose.

    Для интеграции баз данных SQL и noSQL можно использовать пакет @nestjs/typeorm. Также фреймворк позволяет использовать множество других инструментов для интеграции баз данных в приложения Node.js — от Sequelize до Knex.js.

    Функции middleware

    Middleware (промежуточные) функции в NestJS работают так же, как в Express.js. Они могут выполнять следующие действия:

    • исполнять любые фрагменты кода;
    • изменять объекты запроса и ответа;
    • завершать цикл запросов-ответов;
    • вызывать следующую промежуточную функцию.

    Первая особенность использования middleware-функций в NestJS состоит в том, что текущая промежуточная функция должна либо завершать цикл запросов-ответов, либо вызывать следующую middleware-функцию. Иначе запрос останется незавершенным.

    Вторая особенность касается реализации middleware в функциях и классах с декоратором @Injectable(). К функциям не предъявляется особых требований, в то время как классы должны использовать интерфейс NestMiddleware. Например, реализация промежуточной функции с помощью метода класса будет выглядеть так:

    import { Injectable, NestMiddleware } from ‘@nestjs/common’;
    import { Request, Response, NextFunction } from ‘express’;
    @Injectable()
    export class LoggerMiddleware implements NestMiddleware {
    use(req: Request, res: Response, next: NextFunction) {
    console.log(‘Запрос’);
    next();
    }
    }

    NestJS — мощный, гибкий, многофункциональный фреймворк на базе Node.js. Он использует технологии JavaScript и TypeScript, а также позволяет подключать к проекту множество сторонних сервисов и библиотек. 

    Поделиться

    Скопировано

    0 комментариев

    Комментарии