day12


NEST.JSとは何ですか。


効率的で拡張性の高いノード.jsサーバ側アプリケーションのフレームワークを構築します.typescriptとして構築され,オブジェクト向けプログラミング(OOP),関数プログラミング(FP),機能反応プログラミング(FRP)の要素を結合する.また、内部ではExpressなどのHTTPサーバフレームワークを使用し、Fastityを選択して使用することもできます.
まずnestjsをダウンロードしましょう.
$ npm i -g @nestjs/cli
$ nest new project-name
npxというツールでnestをダウンロードできます.
$ npx nest new project-name

npx?


npm 5.2.0バージョンで新しく追加されたツールで、使い捨てコマンドでパッケージを使用できます.
関連項目:npxブログ

NEST.どうしてJSを書くのですか。


expressにはルールがなく、自由すぎて、協力するときに困難に直面する可能性があります.
これはnestjsで解決できます.また、nestjsではIoCとDIのモノトーンモードを使用しており、メンテナンス性に優れています.
  • メンテナンスが容易
  • 拡張性が高い
  • 高信頼性
  • 有名なWebフレームワークはJavaがSpring、PythonがJang、JavaScriptがNestです.
    NESTはスプリングのDI機能も備えている.

    開発と導入に分けられます。


    公開されたサービスを製品と呼ぶまでstart:devコマンドを使用します.
    デプロイに必要なパッケージはdevDependenciesにインストールされます.開発環境でのみ必要なパッケージは、通常の依存項目に格納されます.


    コントロール/コントロール反転(IOC)


    制御反転(Inversion of Control)は一般的な デザインモード 1つとして,開発者が通常プログラムフローを制御する主体である場合,IoCの概念が生成され,dependencyをフレームワークによりコンテナ化してライフサイクルを管理する.
    すなわち,依存する制御権が開発者からフレームワークに移行すると,制御権の流れが変化し,制御権のInversion of Controlと呼ばれる.

    依存注入とは?(DI-Dependency Injection)


    まず、依存性注入を理解するには、メモリとディスクの違いを理解する必要があります.電源をオフにすると、メモリは格納されているデータを削除し、ディスクを保持します.逆に、メモリが速く、ディスクが遅い.
    ただし、nodeがclass new(インスタンス)を実行するたびに、メモリが大量に消費されます.つまり、以前はクラスを1つ使っていた場所が新築され、メモリが大量に消費されていました.
    では、新しい宣言をしましょう.
    注入可能依存性のフレームワーク
    //DI -Framework
    spring(Java), nest.js(ts)
    例えば、料理人がチャーハンを作ると言ったときに2段階(料理人、チャーハン)依存するようになったら、チャーハンではなく甘酢肉を作ると言ったら、それに応じて料理人のレベルを修正しなければならないので、柔軟性が低下します.したがって、料理人が命令を受ければ、料理の種類に応じて料理を設計することができ、これらの問題を解決することができる.
    すなわち、あるクラスと別のクラスをより緊密に動作させるよりも、異なる機能を実現するためにクラスを作成すると、メモリ使用量を削減し、クラス間の依存性を低減することができる.

    NEST.JSのボイラープレート



    typescript


    JavaScriptタイプの言語の強制
    //js
    let aaa="안녕하세요"
    aaa = 123 //123
    //ts
    let aaa:string = "안녕하세요"
    aaa = 123 //type error

    why Use?


    他の言語ではタイプが決定され、変数が選択されていますが、javascriptではそうはいきません.
    あるオークションサイトでは、1人当たり5つの執筆権限があります.しかし、誰かがスクリーンを塗っています.なぜこのようなことが起こったのかがわかったので、「0111111」という形で保存されています.
    //js logic
    let count = "0"
    count += 1
    if(count < 5){
    	글쓰기
    }// "011111111"
    もし本当に大きなサービスでこのようなことが起こったら、見つけるのは難しく、修正するのも難しいです.すなわち,タイプが特定された場合に実施すれば,このようなエラーは発生しない.

    typescriptの使用方法


    次の図に示すように、変数を宣言することでタイプを決定し、
    let aaa:string = "안녕"
    let bbb:number = 123
    
    対象のタイプは自分で作る必要があります.(インタフェースで作成)
    Interface IProfile {
    	name: string
        age: number
    }
    let profile: IProfile = { name:"철수", age:13}
    このほかにも、さまざまなプロパティがあります.
    //데코레이터란?
    //함수
    
    // yarn add typescript --dev => dev로 저장
    // yarn add ts-node => ts를 node에서 실행시키기 위해 설치
    function zzz(aaaaa){
        console.log("---")
        console.log(aaaaa)
        console.log("---")
    }
    
    @zzz
    class AppController {}
    
    
    //public
    class aaa {
        constructor(public mypower){//public은 어디서든 바꿀 수 있다
            this.mypower = mypower
        }
        ggg(){
            console.log("안녕")
        }
    }
    
    const AAA = new aaa(50)
    AAA.mypower = 5
    // private
    class bbb {
        constructor(private mypower){//public은 어디서든 바꿀 수 있다
        }
        ggg(){
            this.mypower = 10;
            console.log("안녕")
        }
    }
    const BBB = new bbb(50)
    BBB.mypower = 5 //private를 사용하면 객체 안에서만 사용 가능!
    
    
    // readonly 안에서 읽기만 가능하고, 값 변경 X
    class CCC {
        constructor(readonly mypower){//public은 어디서든 바꿀 수 있다
        }
        ggg(){
            this.mypower = 10;
            console.log("안녕")
        }
    }

    yarn.lock


    通常、プロジェクトに使用するライブラリまたはフレームワークをパッケージ化します.jsonに明記する.では、これらのライブラリやフレームワークに依存するライブラリはどこに表示されますか?
    yarn.ロック!