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のモノトーンモードを使用しており、メンテナンス性に優れています.
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.ロック!
Reference
この問題について(day12), 我々は、より多くの情報をここで見つけました https://velog.io/@antipiebse/day12テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol