nest js -8 List Particular member(parameter) in DB Record with TypeORM(GET)

 

이번에는 특정 memberId를 이용하여 정보를 불러오겠다.


// member.service.ts : /src/members

import { Injectable} from "@nestjs/common";
import { InjectRepository } from '@nestjs/typeorm';
import { MemberRepository } from "./member.repository";
import { Member } from "./member.entity";


// controller에 method를 제공해 준다.
@Injectable()
export class MembersService{
constructor(
// DB를 사용하게 되서 더이상 members는 필요 없어졌다.
@InjectRepository(MemberRepository)
private memberRepository: MemberRepository
) {}
// DB구축전 테스트용 코드(DB설치후 삭제)
//private members: Member_ver1[] = [];


// DB에 있는 모든 member를 조회한다.
async inquireAllMember(){
// find()은 쿼리문 SELECT * FROM members;
// 이라고 보면 된다.
return await this.memberRepository.find();
}

// DB에 있는 모든 member를 조회한다.
async inquireOneMember(
memberId : number
){
// find({id : memberId})은 쿼리문
// SELECT * FROM members where id=[memberId(숫자)];
// 이라고 보면 된다.
return await this.memberRepository.findOne({id : memberId});
}



// Controller에서 회원정보 등록 요청시
// DB와 통신을 해야하기 때문에 async사용.
async createMember(
name : string,
password : string,
email : string,
age : number,
) : Promise <Member>{

// createMember method를 이용하고 결과를 member.controller에 보낸다.
return await this.memberRepository.createMember(name, password, email, age);
}
}


 요청이 들어올때 body에 id를 넣을수 있지만 이번에는 params쪽에 넣고 NestJS에서 확인하는 로직을 짰다. 

 이번 Get요청도 간단하기 때문에 service에서 바로 controller에 결과를 return한다. 



// member.controller.ts : /src/members

// Controller를 구성하기 위한 method
// Controller : nest js에서 컨트롤 구현시 필요
// Post : nest js에서 Client의 Post 구현시 필요
// Body : nest js에서 Client의 Body를 추출할때 필요
import {
Controller,
Post,
Body,
Get,
Query
} from '@nestjs/common';
// MembersService method를 참조
import { MembersService } from './member.service';


// Controller의 시작부분
// ('members')일시 url은 root/members으로 요청이 와야
// 아래 Controller이 실행된다.
@Controller('members')
export class MembersController{

// MembersService는 현재 class안에서만 사용할수 있다.
// 동시에 읽기 전용이다.
constructor(private readonly membersService: MembersService) {

}

// GET요청 URL : root/members
@Get()
async inquireMember(@Query() query){

// parame의 id가 존재하지 않음
// 모든 member를 조회한다.
if(!query.id){
// service에서 method inquireAllMember를 이용하여
// 모든 DB에 있는 member정보를 받는다.
return await this.membersService.inquireAllMember();
}

else{
return await this.membersService.inquireOneMember(query.id);
}

}

// POST요청 URL : root/members
@Post()
async addMember(
// Client의 Body에서 온 정보를 각각 변수로
// 저장
@Body() completeBody: {
name : string,
password : string,
email : string,
age : number
}

/* 위 주석의 방법으로 사용할수 있음
Body에서 받은 변수들은 각각 name, password, email, age이다.
@Body('name') name: string,
@Body('password') password: string,
@Body('email') email: string,
@Body('age') age : number
*/

){
// membersService의 insertMember를 이용하여 신입회원을
// 가입시키고 해당 PkId를 return한다.
const memberPkId = await this.membersService.createMember(
completeBody.name,
completeBody.password,
completeBody.email,
completeBody.age
);

return memberPkId;

}

}


이제 Controller에서 조회한 id의 결과를 보내준다. 다만 Get요청이 하나만 있다. 이는 만약 params에 id가 존재할시 단일 member만 조회한다. 그 외는 모두 전체 member의 정보를 조회해 Client쪽에 보내준다.







이로써 개별로 조회하는 방법에 대해서 마무리 하겠다. 





댓글

이 블로그의 인기 게시물

Lesson 12_1 프로퍼티 노드(Property Node)

DAQ로 전압 측정하기-2

Lesson 12_2 참조를 이용한 프로퍼티노드(Property Node)