Nest.js : 완전한 개발자

타자기


내가 먼저 무엇을해야합니까


왜 처음부터?


VSCode 터미널

  1. mkdir 스크래치
  2. CD 스크래치
  3. npm 초기화 -y
  4. 패키지.json 만들기
  5. 종속성 패키지 설치
  6. npm 설치 @nestjs/[email protected] @nestjs/[email protected] @nestjs/[email protected] [email protected] [email protected]

Package.json 구성


첫 번째는 @nestjs/common입니다.

Nest 라이브러리 자체는 여러 패키지로 분할됩니다.

대부분의 기능, 중첩된 애플리케이션을 빌드하는 데 사용되는 클래스 및 기타 항목은 일반적입니다.패키지로 제공됩니다.

따라서 프로세스 전반에 걸쳐 이러한 패키지 중 일부를 가져올 것입니다.

다음으로 핵심 주제를 건너뛰고 플랫폼 Dasch Express를 계속 진행합니다.

그건 좀 더 흥미롭고 Nest가 내부에서 수행하는 작업을 이해하는 데 정말 도움이 됩니다.

따라서 내부적으로 Nest는 들어오는 요청을 효과적으로 처리하지 않습니다.

Nest 서버 로직


Nest는 요청을 처리하기 위해 외부 구현에 의존하므로 최종적으로 빌드하는 Nest 서버는 HTTP 구현을 연결해야 하는 코드에 위치를 갖게 됩니다.

들어오는 요청을 처리하고 나가는 응답으로 응답할 수 있는 서버를 제공해야 합니다.

현재 Nest에서 HTTP 서버를 구현하는 두 가지 방법이 있습니다.

널리 사용되는 Express.js 라이브러리 또는 Fastify라는 다른 라이브러리를 사용할 수 있습니다.

이 두 HTTP 서버 구현 중에서 선택하고 Nest가 기본적으로 사용하는 것을 삭제해야 합니다.

현재 익스프레스입니다.

Express는 새 Nest 프로젝트를 만들 때 기본 HTTP 서버 구현으로 사용됩니다.

그러나 이 자습서에서는 Express 대신 Fastify를 사용합니다.

어느 것을 선택하느냐는 빌드하는 애플리케이션의 유형에 따라 다릅니다.

여기서는 기본 Express 구현 대신 Fastify를 사용합니다.


Package.json 구성으로 돌아가 보겠습니다.


Platform Dash Express 종속성은 Nest가 Express를 사용하여 들어오는 HTTP 요청을 처리할 수 있는 어댑터를 설치함을 의미합니다.

즉, Nest는 들어오는 요청을 처리하기 위해 내부적으로 Express를 사용하지만

Nest와 상호작용하여 엔드포인트와 컨트롤러를 생성합니다.

Reflect-Metadata는 메타데이터와 관련된 라이브러리입니다.

Nest와 상호 작용하는 가장 일반적인 방법인 TypeScript를 사용합니다.

그러나 사용할 필요는 없습니다.

JavaScript를 사용할 수 있지만 권장하지 않습니다.

TypeScript에 프로젝트를 컴파일하는 방법을 알려주는 몇 가지 설정을 작성할 것입니다.


1단계와 2단계를 수행할 필요가 없습니다.

이것은 처음부터 프로젝트를 빌드할 때 수행하는 단계일 뿐입니다.

VSCode로 돌아갑니다.

  1. 스크래치 => 생성 => tsconfig.json 생성
{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es2017",
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true
    }
}

  • “module”: 컴파일러 출력을 위한 모듈 코드 생성을 지정합니다. 이 경우 CommonJS 모듈 형식이 출력에 사용됨을 의미하는 “commonjs”로 설정됩니다.
  • “target”: ECMAScript 대상 버전을 지정합니다. 이 경우 출력이 ECMAScript 2017(ES8)과 호환됨을 의미하는 “es2017″로 설정됩니다.
  • “experimentalDecorators”: 클래스와 속성에 주석을 달고 수정할 수 있는 JavaScript 함수인 ES Decorators에 대한 실험적 지원을 활성화합니다.
  • “emitDecoratorMetadata”: 컴파일러가 데코레이터 유형 주석에 대한 메타데이터를 내보내야 하는지 여부를 지정합니다. 이 옵션은 NestJS에서 종속성 주입 데코레이터를 사용하려는 경우에 필요합니다.

2단계입니다. (?)

3단계


3단계와 4단계로 이동합니다.

3단계에서 Nest 모듈 및 컨트롤러를 생성해야 합니다.하다.

컨트롤러의 모듈이 무엇인지 빠르게 알려주기 위해 몇 가지 다른 다이어그램을 살펴보겠습니다.

서버를 조립한 적이 있다면 위의 다이어그램이 친숙해 보일 것입니다.할 것이다.

구축하려는 거의 모든 HTTP 서버에는 요청-응답 주기가 있습니다.할 일이 있습니다.

사용자는 서버 내에서 서버에 요청을 하고 해당 요청을 처리하는 코드는 다음과 같습니다. 약간 있을 것이다

요청 내에서 일부 데이터의 유효성을 검사할 수 있습니다.

요청은 처리된 경로에 따라 다르게 처리될 수 있습니다.

그런 다음 최종적으로 응답을 공식화하고 요청한 사용자에게 다시 보냅니다.

Nest는 이 요청-응답 주기를 처리하기 위해 모듈과 컨트롤러를 생성합니다.

이것은 지금까지 구성한 거의 모든 서버의 요청을 처리합니다. 코드는 거의 항상 기본적으로 동일하게 보입니다.

즉, 이러한 유형의 요청-응답 주기에는 언어 프레임워크 라이브러리 또는 서버 구축이 필요합니다.무엇을 하든 내부에는 거의 항상 동일한 단계가 있습니다.

따라서 이 코드 또는 프로세스는 거의 항상 다음과 같습니다.

따라서 이러한 경우 각 단계에 대처하는 데 도움이 되는 특수 도구를 사용할 수 있습니다.

일반 서버 요청 단계


Nest 서버 요청 단계


Nest는 소위 파이프를 생성하고 들어오는 요청에 대한 데이터를 검증할 수 있습니다. 도움이 될 도구가 있습니다.

Guards는 들어오는 요청이 우리 응용 프로그램을 사용하도록 인증되거나 권한이 있는 사용자로부터 오는지 확인합니다. 확인하세요.

컨트롤러에는 라우팅 논리가 포함되어 있습니다.

서비스라는 것을 만들 수 있는 도구가 있습니다. 비즈니스 논리 등을 포함합니다.

따라서 이 과정에서 Nest로 작업하면서 이러한 다양한 도구 세트 각각에 대해 배우게 됩니다. 경험

Nest와 함께 제공되는 이러한 각각의 도구 세트는 들어오는 요청을 처리하고 일부를 라우팅하는 데 도움이 됩니다.통합에 사용됩니다. 여기서 소개할 5가지 도구 외에도 살펴보고 싶은 도구가 몇 가지 더 있습니다.


예, 위의 이미지는 Nest의 모든 도구를 보여줍니다. 들어오는 요청을 처리하는 데 도움이 됩니다.

따라서 우리는 마지막 다이어그램에서 본 컨트롤러와 서비스를 여전히 가지고 있습니다.

모듈도 있다

파이프, 필터, 가드, 인터셉터 및 창고가 있습니다.

이 과정에서 이 모든 것을 배우게 됩니다.

가능한 가장 간단한 인터리빙 응용 프로그램을 구성하는 데 필요한 최소한의 것은 다음과 같습니다. 모듈 및 컨트롤러.

지금까지 생성한 모든 중첩 애플리케이션에는 최소한 하나의 모듈과 하나의 컨트롤러가 포함되어 있습니다.

조금 전에 본 차트에서,

바로 여기에 둥지 모듈이 있고당신은 당신이 컨트롤러를 만들 것이라고 말했다.

가장 간단한 기본 앱을 만드는 데 필요한 두 가지 사항입니다.

편집기로 돌아가서 모듈과 컨트롤러를 생성해 봅시다.

src 디렉토리 생성

📦scratch
 ┣ 📂src
 ┣ 📜.gitignore
 ┣ 📜package-lock.json
 ┣ 📜package.json
 ┗ 📜tsconfig.json

src라는 새 디렉토리를 만듭니다.그런 다음 Main.ts라는 새 파일을 만듭니다.

이것은 다음 프로젝트에서 실행할 첫 번째 파일이 되므로 일반적으로 여기에 애플리케이션을 배치합니다. 특정 포트에서 트래픽을 수신하고 시작하는 코드가 있습니다.

우리는 일반적으로 별도의 파일에 모듈과 컨트롤러를 생성하지만 지금은 표준 텍스트가 있습니다. 파일에 직접 모듈과 컨트롤러를 생성합니다.

따라서 지금은 이 파일에 모든 논리가 있지만

콘텐츠를 매우 빠르게 별도의 파일로 추출할 것입니다.

위의 중요한 지침을 추가하여 모듈 및 컨트롤러를 구축하고

@nest/Common에서 모듈이라는 것을 가져옵니다.

import { Controller, Module } from "@nestjs/common";

앞서 언급했듯이 컨트롤러와 모듈을 만드는 데 도움이 되도록 Nest에서 제공하는 도구입니다.

컨트롤러를 만들려면 먼저 컨트롤러에 초점을 맞추고

아파트Controller라는 클래스를 만들어 봅시다.

바로 위에 AppController를 추가한 다음 함수처럼 호출합니다.

@Controller()
class AppController {
    
}

이 경우 데코레이터라고 합니다. (@제어 장치)

이 데코레이터는 애플리케이션 내에서 컨트롤러 역할을 합니다. 클래스를 만들려고 한다는 것을 Nest에 알립니다.

들어오는 요청을 처리하고 라우팅하는 클래스입니다.

Nest는 데코레이터를 매우 자주 사용하므로 이 프로세스 중에 이 작업을 수행해야 합니다. 우리는 그것이 어떻게 작동하는지 등에 초점을 맞출 것입니다.

그런데 지금 무슨 일을 하고 계세요? 이야기하자

그런 다음 클래스 내부에 다른 메서드를 추가합니다.

각 메서드는 한 가지 유형의 들어오는 요청을 수락합니다. 처리하도록 설계되었습니다.

특히 응용 프로그램에서 다른 경로를 사용하려면 추가 방법을 추가하고 싶습니다. 하다.

예를 들어 애플리케이션 루트에 대한 Get 요청을 처리하려는 경우 새 메서드를 만들 수 있습니다. 추가할 수 있습니다

해당 메서드는 getRootRoute()입니다.보지마.

import { Controller, Module,Get } from "@nestjs/common";

@Controller()
class AppController {
    @Get()
    getRootRoute() {
        
    }
}

그런 다음 누군가가 우리 애플리케이션에 요청을 하면 해당 요청을 처리하는 메서드는 바로 여기에서 getRootRoute()라고 합니다.내가 할게.

공유 라이브러리에서 다른 도우미를 가져올 것입니다. 이 도우미를 Get Decorator(@Get)라고 합니다. 이를 통해 get이라는 HTTP 메서드가 있는 들어오는 요청에 응답하여 내 메서드에 대해 작성할 수 있습니다. 경로 처리기를 만들 수 있습니다.

이렇게 Get 에 넣겠습니다. 내 메서드 내에서 누군가 트렁크에 요청을 할 때 이 메서드를 실행합니다.

이 요청에 응답하기 위해 해야 할 일은 이 메서드에서 값을 반환하는 것뿐입니다. 따라서 이 경우 문자열을 반환할 수 있습니다.

음, 이론적으로 누군가가 신청 요청을 제출하면 여기에서 바로 이 방법으로 안내됩니다.우리는 해당 문자열을 반환하고 Nest는 자동으로 해당 문자열을 가져와 요청과 일치시킵니다.그 사람에게 다시 보내

2부에서…