4日目js-データモデルとPost,Body(John Ahn)の学習
Nestjs
この授業は「johnahn」の授業内容を整理する
https://www.youtube.com/watch?v=3JminDpCJNE
では、投稿の作成、削除、変更のCRUD作業を開始します.
DBに直接バインドするよりも、ローカルメモリに入れて処理します.
1.すべてのBoards情報を読み込む
クライアントからリクエストを送信すると、コントローラに移動し、適切なリクエストパスにルーティングし、対応するプロセッサに送信します.その後、サービスにアクセスして要求を処理し、サービスは要求に合致する論理を処理し、戻り値をControllに送信し、結果値をコントロールからクライアントに送信します.
したがって、コントローラは、要求を処理し、結果値を返す役割を果たす.
今からサービスを作りましょう.import { Injectable } from '@nestjs/common';
@Injectable()
export class BoardsService {
private boards = [];
getAllBoards() {
return this.boards;
}
}
以前に作成したBoardServiceに作成するBoardsを含むリストを用意し、すべてのBoards情報をロードする方法をgetAllBoards()
として定義し、Boardsリスト全体を返す値を与えます.
コントローラの処理部に入りましょう.@Controller('boards')
export class BoardsController {
constructor(private boardService : BoardsService){}
@Get()
getAllBoard(){
return this.boardService.getAllBoards();
}
}
コントローラは、@Get()
デコーダを介して/boards
urlのパスにすべてのボードリスト情報を返す.boardService
はBoardController
クラスとして登録されているので、this.boardService
を介してアクセスし、上記で定義したすべてのボードを呼び出して返す方法getAllBoards()
を使用することができる.
サーバーを起動し、nestjs appがあるフォルダに次のコマンドを入力します.nest run start:dev
サーバーが起動します.
http://localhost:3000/boards
urlに入ると、次の画面が表示されます.
私たちが望むように、論理が処理されたことを確認することができます.
2.Boardモデルの定義
投稿にはid、description、number、dayなどのステータス値が含まれます.これには、これらのものを保存し、簡単に処理するためのモデルが必要です.つまり、モデルファイルが必要です.
src/boardモジュール内にboard.model.ts
を作成
モデルはcliを使用せずに直接作成できます.
作成した場合は、インタフェースまたはclassのいずれかでモデルを定義します.
両者の違いは以下の通りです.interface : 변수의 타입만을 체크한다.
class : 변수의 타입도 체크하고, 인스턴스 또한 생성이 가능하다.
boardの構造のみを定義するために,インタフェースを使用することにした.export interface Board {
id: string;
title: string;
description: string;
status: ;
}
statusは、投稿が公開されているか非公開のかを配布するために使用されます.そのため、PUBLIC
かPRIVATE
かを配布する必要があります.可読性のためにenumを使いましょう.export interface Board {
id: string;
title: string;
description: string;
status: BoardStatus;
}
export enum BoardStatus {
PUBLIC = "PUBLIC",
PRIVATE = "PRIVATE"
}
次のように変更します.
参照として、インタフェースは;
で終わる特徴を有し、enumは,
で終わる特徴を有する.cまたはjavaを用いてenumを学習した場合、,
に類似した特徴を用いることが考えられる.
では、作成したモデルを使用しましょう.
BoardServiceに行きましょう@Injectable()
export class BoardsService {
private boards : Board[] = [];
getAllBoards() : Board[] {
return this.boards;
}
}
以前はBoardタイプはありませんでしたが、今はBoardインタフェースタイプがあるので使えばいいです.
コントローラもそうです.@Get()
getAllBoard() : Board[] {
return this.boardService.getAllBoards();
}
以前に作成したコントローラのgetalBoard()関数にも書くことができます.
このようにタイプを決定すると、必要なタイプと異なるタイプのコードを使用するとエラーが発生し、読み取りが改善されます.また、開発の過程でタイプを知ることができるので、システムが複雑であればあるほど、開発効率が高くなります.
3.ボードの作成
上からすべてのboardをインポートするように、boardを作成してサービスでソフトウェアロジックを処理し、controllerがurlに送信されたときにサービスを呼び出すこともできます.
サービス->組織者になる.
boardのデータを入れる前にidはどのように処理しますか?
データベースを使用すると自動的にデータベースがインストールされ、メモリデータの処理時にidを入れる必要がある場合はuuid
パッケージが使用されます.npm install uuid --save
適切なコマンドを入力すると、パッケージがインストールされます.
次に、サービスセクションに移動し、uuidを使用して投稿を生成するcreateBoard
メソッドを作成します.import { Injectable } from '@nestjs/common';
import { Board, BoardStatus } from './boards.model';
import {v1 as uuid } from 'uuid'
@Injectable()
export class BoardsService {
private boards : Board[] = [];
getAllBoards() : Board[] {
return this.boards;
}
createBoard(title: string, description: string ){
const board : Board = {
title,
description,
id : uuid(),
status : BoardStatus.PUBLIC,
}
this.boards.push(board);
return board;
}
}
createBoard
メソッドを作成し、boardの内容を入力します.
コントロールからサービスをロードできるようになりました.サーバのステータス(データの変更または削除または作成)の場合は、Postを使用します.
このため、コントローラでメソッドを定義するには、次のようにします.
js構文の1つを使用してオブジェクトを作成する場合、キーを付けずにvalueのみを追加すると、value名に基づいてkeyが自動的に生成されることに注意してください.したがって,titleとdescriptionを加えるだけでよい.@Post()
createBoard(){
}
Nestjsからユーザーからの情報を取得する方法
ただし,ユーザから情報を取得する必要がある.
すなわち、expressは、bodyParser
モジュールを使用し、req.body
の方法で使用される投稿の説明などを得る必要がある.
Nestjsでは、処理方法のパラメータの前に@Body()
データレコーダを使用すればよい.これにより、すべてのrequestからの値を取得することができ、1つずつ取得するには、@Body('title')
または@Body('description')
のような特定の値しか得られない.@Post()
createBoard(@Body() body){
console.log(body)
}
すべてのBodyをインポートできますが、titleとdescriptionをインポートするだけです.@Post()
createBoard(@Body('title') title : string, @Body('description') description : string) : Board {
return this.boardService.createBoard(title, description);
}
今サーバーを開けてpostmanでテストします.
urlを設定して、リクエストを送信するときにrawに設定してjson形式で送信することもできます.
これにより、正常な応答が確認されます.
Reference
この問題について(4日目js-データモデルとPost,Body(John Ahn)の学習), 我々は、より多くの情報をここで見つけました
https://velog.io/@chappi/Nestjs를-배워보자-4일차-Data-Model과-Post-Body-John-ahn님-강의
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import { Injectable } from '@nestjs/common';
@Injectable()
export class BoardsService {
private boards = [];
getAllBoards() {
return this.boards;
}
}
@Controller('boards')
export class BoardsController {
constructor(private boardService : BoardsService){}
@Get()
getAllBoard(){
return this.boardService.getAllBoards();
}
}
nest run start:dev
interface : 변수의 타입만을 체크한다.
class : 변수의 타입도 체크하고, 인스턴스 또한 생성이 가능하다.
export interface Board {
id: string;
title: string;
description: string;
status: ;
}
export interface Board {
id: string;
title: string;
description: string;
status: BoardStatus;
}
export enum BoardStatus {
PUBLIC = "PUBLIC",
PRIVATE = "PRIVATE"
}
@Injectable()
export class BoardsService {
private boards : Board[] = [];
getAllBoards() : Board[] {
return this.boards;
}
}
@Get()
getAllBoard() : Board[] {
return this.boardService.getAllBoards();
}
npm install uuid --save
import { Injectable } from '@nestjs/common';
import { Board, BoardStatus } from './boards.model';
import {v1 as uuid } from 'uuid'
@Injectable()
export class BoardsService {
private boards : Board[] = [];
getAllBoards() : Board[] {
return this.boards;
}
createBoard(title: string, description: string ){
const board : Board = {
title,
description,
id : uuid(),
status : BoardStatus.PUBLIC,
}
this.boards.push(board);
return board;
}
}
@Post()
createBoard(){
}
@Post()
createBoard(@Body() body){
console.log(body)
}
@Post()
createBoard(@Body('title') title : string, @Body('description') description : string) : Board {
return this.boardService.createBoard(title, description);
}
Reference
この問題について(4日目js-データモデルとPost,Body(John Ahn)の学習), 我々は、より多くの情報をここで見つけました https://velog.io/@chappi/Nestjs를-배워보자-4일차-Data-Model과-Post-Body-John-ahn님-강의テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol