무료
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결따라하며 배우는 NestJS
DTO 를 interface가 아닌 class로 해주는 이유가 있나요?
보면 instance를 생성하는 것이 아닌 type check 정도만 해주는거 같은데 interface가 아닌 class 로 써주는 이유가 있나요?
- 미해결따라하며 배우는 NestJS
jwt 토큰 생성중에 질문있습니다
안녕하세요. 이렇게 질 좋은 강의를 무료로 열어주신 것에 먼저 감사드립니다. 제가 아직 잘 못따라가서인지 모르겠지만 현재 controller, service, repository 세부분을 나누어서 역할을 구분짓고 있습니다 controller에선 엔드포인트 설정해주고 service에선 목적에 맞게 값을 리턴해서 controller에 올려주고 repository에선 DB와 교환이 발생하는 부분은 여기서 관리하고 있습니다 영상에서는 service에서 토큰을 생성후에 객체안에 담아서 accessToken을 넣어주고 있습니다 하지만 저는 repository에서 토큰을 생성후에 토큰을 담아주고 싶은데 Cannot read properties of undefined (reading 'sign') 오류가 나옵니다 구글링을 해보았지만 모듈에 있는 import부분을 건드리라는 말밖에 없는것 같아 질문을 드립니다 현재 제가 작성한 코드는 영상과 전부 같게 작성했고 단지 jwtService:JwtService 선언한 부분만 추가해 주었습니다 왜 sign부분을 읽지 못하는걸까요..? 너무 궁금합니다 * 영상대로 진행하면 제대로 토큰값을 반환합니다! * import { ConflictException, InternalServerErrorException, NotFoundException, UnauthorizedException } from "@nestjs/common"; import { EntityRepository, Repository } from "typeorm"; import { CreateUserDto, UserLoginDto } from "./dto/user.dto"; import { UserStatus } from "./user-status-validation"; import { User } from "./user.entity"; import * as bcrypt from 'bcryptjs' import { JwtService } from "@nestjs/jwt"; @EntityRepository(User) export class UserRepository extends Repository<User> { private jwtService: JwtService; async signIn(userLoginDto:UserLoginDto): Promise<{accessToken:string}>{ const { userid, password } = userLoginDto const user = await this.findOne({ userid }) if(user && (await bcrypt.compare(password, user.password ))){ const payload={userid} const accessToken= await this.jwtService.sign(payload) return {accessToken:accessToken} } else { throw new UnauthorizedException('login failed') } } }
- 미해결따라하며 배우는 NestJS
nest new 프로젝트명 이렇게 만들고 나서 git에 올리기
nest 명령어로 server라는 프로젝트를 만들었는데 git에 올리려고 하니까 이미 git init로 프로젝트가 생성 되었더라고요 이런경우엔 어떻게 올리나요?
- 해결됨따라하며 배우는 NestJS
강의 커리큘럼 질문
강의 수강 전 타입 스크립트 어느 정도까지 배워야 할까요?
- 미해결따라하며 배우는 NestJS
socket관련 질문!
안녕하세요! 먼저 강의 잘 들었습니다 강의보고 따라해보니 CRUD 프로그램 개발에는 조금이나마 이해가 됩니다 그런데 socket을 이용하여 tcp 통신을 해야하는 프로젝트를 진행중인데 nest.js 공식 문서를 보니 @SubscribeMessage('event_name') 을 이용하여 데이터를 받고 emit을 이용하여 event_name으로 주는 환경이더라고요?? 현재 서버를 nest.js 기반으로 개발하고 개발해 놓은 클라이언트(c++작성)에서 tcp 통신을 하기 위해서는 c++ 클라이언트에서도 socket.io를 활용하여 event_name 을 통하여 통신을 해야하는 것인가요? 아니면 event_name 없이 단순 tcp 통신을 통해 binary 데이터를 주고 받을 수 있는 서버 nest.js 환경이 있을까요?? 제가 socket.io에 대해 이해한 내용이 맞는건지도 잘 모르겠지만 답변 부탁드리겠습니다!
- 미해결따라하며 배우는 NestJS
board 테이블에 userId라는 키값
board 테이블 안에 userId라는 키값은 어떤 기준으로 생성되는건가요? typeorm에서 제공하는 컨벤션인가요?
- 미해결따라하며 배우는 NestJS
findOne(id) 에서 에러가 발생한 경우 해결법
# Info 강의 업로드 연도(2021) 와 수강 연도(2022) 사이에 TypeORM 의 버전이 달라서, Repository.findOne() 메서드의 구성이 달라진 것 같다고 생각합니다.강의 대로 코드를 작성하면 후술할 에러가 발생하는데, 해당 부분을 해결하고 나서, 다른 수강생 분들 도 이런 문제를 겪을까 생각되어서 따로 글로 남기게 되었습니다. ## 문제 세 줄 요약 1. fineOne( id) 를 하면 에러가 발생 2. 관련 레퍼런스가 없어서 TypeORM docs 확인 3. fineOneBy({id}) 로 에러 해결 (2022-03-30) 자세한 내용은 ### 해결방법, ### 참고문서, ### 초기질문 참고해주세요.깃 : unchaptered/22-03-nestjs-board: Nest.JS (github.com) ### 해결방법 2022년 3월 30일 기준으로, this.boardsRepository.findOne( id ); 위와 같이 입력을 했는데 에러가 발생했다면, 해당 부분을 다음의 코드로 교체해서 해결할 수 있습니다. this.boardsRepository.fineOneBy({ id }); ### 참고문서 아래 페이지에서 Ctrl + F 로 fineOne 혹은 fineOneBy 를 검색해서 확인하시면 됩니다.TypeORM - Amazing ORM for TypeScript and JavaScript (ES7, ES6, ES5). Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL databases. Works in NodeJS, Browser, Ionic, Cordova and Electron platforms. ### 초기 질문 boards.service.ts 의 getBoardById() 에서 this.boardsRepository.fineOne(id); 를 하면 id 에 붉은 경고가 다음과 같이 발생하고 있습니다. 혹시 해당 부분이 왜 문제가 되는지 알 수 있을까요? 정크 데이터까지만 푸쉬 해놓았지만, node_module 버전 문제일까 싶어서 깃 허브 링크도 최하단에 올려놓겠습니다. 위의 에러가 발생하는 해당 코드입니다. async getBoardById(id: number): Promise<Board> { const found = await this.boardsRepository.findOne(id); if (!found) throw new NotFoundException(`Can't find Board by ${id}`); return found; } 엔티티 import { BaseEntity, Column, PrimaryColumn, PrimaryGeneratedColumn } from "typeorm"; import { BoardStatus } from "./board-status.enum"; export class Board extends BaseEntity { @PrimaryGeneratedColumn() id: number; @Column() title: string; @Column() description: string; @Column() status: BoardStatus; } baords.repository.ts import { EntityRepository, Repository } from "typeorm"; import { Board } from "./entity/board.entity"; @EntityRepository(Board) export class BoardsRepository extends Repository<Board> { } 깃허브 : unchaptered/22-03-nestjs-board: Nest.JS (github.com)
- 미해결따라하며 배우는 NestJS
ConnectionOptions 게시물을 위한 엔티티 생성
typeorm 0.3.xx 버전 https://github.com/typeorm/typeorm/blob/master/CHANGELOG.md @nestjs/typeorm https://github.com/nestjs/typeorm/issues/1213 아직 typeorm 0.3 버전을 지원을 안하네요 0.3 버전에서 connectionOptions 가 사라져서 에러가 납니다 ㅠㅠ; Connection, ConnectionOptions are deprecated, new names to use are: DataSource and DataSourceOptions. To create the same connection you had before use a new syntax: new DataSource({ /*...*/ }). yarn add typeorm@0.2 로해서 다운받으세요 ㅠㅠ
- 미해결따라하며 배우는 NestJS
Custom Repository 부분에서 에러가 납니다.
Postgres & TypeORM 연동하고 데이터베이스를 이용한 CRUD 구현 부근 진행중인데요. 일단 board.repository.ts 만들 때 EntityRepository가 deprecated라고 뜨더라고요. 일단 진행했는데 Repository 관련 에러가 뜨고 해결방법을 못찾아서 그냥 Entity자체를 Repository<Board> 식으로 감싸서 사용하는 식으로 해서 진행은 했습니다. 에러 내용은 아래처럼 뜹니다. TypeError: Cannot set property metadata of #<Repository> which has only a getter 아 그리고 한가지 더 안되는 부분이 있었는데요. this.boardRepository.findOne(id) 하는 부분이 에러가 나더라고요. src/boards/boards.service.ts:17:54 - error TS2559: Type 'number' has no properties in common with type 'FindOneOptions<Board>'. 그래서 이부분은 const found = await this.boardRepository.findOne({ where: { id } }); 이렇게 작성해서 해결은 했습니다만.. 원인은 잘 모르겠네요ㅠ
- 미해결따라하며 배우는 NestJS
vs code icon 익스텐션 문의
강의에서 사용하시는 vscode icon관련 익스텐션은 어떤거 쓰고 계신가요~?
- 미해결따라하며 배우는 NestJS
상태변경에서 값을 읽어내질 못합니다...ㅠㅠ
value로 값이 전달이 되지 않는데 어디서 부터 문제인지 잘 모르겠습니다 ㅠㅠ
- 미해결따라하며 배우는 NestJS
id 값을 입력하면 상태가 바뀌지 않고 삭제가 됩니다.
설명해주신대로 코드를 작성을 하고 저는 Swagger를 통해서 변경 되는지 확인을 했습니다. 하지만 id를 입력하고 patch로 보내니까 게시물에 status가 아예 삭제되고 console로 찍어보니 undefined로 나오네요 어떻게 해야하나요 처음에 혼자 생각했을때는 service에 board.status = status; 부분에서 board.status에 현재 비어있는 status가 들어가서 그런건 아닌가 싶은데 잘모르겠습니다...
- 미해결따라하며 배우는 NestJS
파이프와 DTO 관련 질의입니다.
안녕하세요! 현재 nest js를 수강하고 있는 학생입니다. 다름이 아니라 DTO를 구현함에 있어서 한 가지 질문이 있어서 글을 남깁니다. 저는 서버 개발을 Spring으로 시작했으며 DTO 내부에 toModel() 함수를 구현해서 DTO 와 Model을 매핑하는 방식을 선호합니다. 그래서 이번에도 DTO 내부에 toModel() 함수를 구현해서 사용했습니다. 초기에는 잘 돌아가다가 pipe 부분을 구현하고 나서 to model() is not a function 에러가 뜨네요! createController를 통해 들어온 body의 타입 체크를 해보니 CreateDto로 들어오지 않았기 때문에 function이 안잡히는 듯 한데 또 isNotEmpty 는 잘 작동합니다! 혹시 pipe에서 valid 동작하고 나오면 DTO mapping이 풀리는 건가요??? 관련 소스 코드 첨부합니다!! (CreateBoardDto) (controller) (service) (error) (method 유효 확인)
- 미해결따라하며 배우는 NestJS
인증된 유저 정보를 통한 게시물의 생성과 삭제에 대한 질문
우선은 강의 너무 재밌고 유익하게 수강하였습니다 :)질문은 아래와 같습니다. -----jwt.strategy.ts 에서는 request 를 파싱하여 user 의 정보값을 return 해주는데 이렇게 return 된 user 의 정보중에서 id 만을 가지고 user 하위의 board 를 생성할수는 없는건가요? user 의 전체적인 정보 ( 강의내용상 id, username, password )를 필수적으로 아래와 같이 전부 넘겨야 하는건가요?this.create(createBoardDto, user)
- 미해결따라하며 배우는 NestJS
bcrypt와 bcryptjs
두개의 라이브러리중 bcryptjs를 쓰신 이유가 있을까요??
- 미해결따라하며 배우는 NestJS
pdf 자료 질문!
pdf 자료 열어보니 많이 잘려서 나오던데 어떻게 봐야 안잘리게 볼수있을까용?
- 미해결따라하며 배우는 NestJS
급한오류!!!!!
잘 진행해 오다가 이런 오류 뜹니다!
- 미해결따라하며 배우는 NestJS
salt 이용하여 패스워드 생성후, 나중에 패스워드 비교할때 salt값이 필요하지 않나요?
안녕하세요. 강의 잘 듣고 있습니다! bcrypt를 이용한 패스워드 생성, 비교할때 궁금점이 생겼습니다. const salt = await bcrypt.genSalt() const hashedPassword = await bcrypt.hash(password, salt) 이렇게 password 생성하여 저장했으면, 로그인할때 password 값 비교할때 저 방식과 똑같이 password 생성하여 DB에 저장되어있는 값과 비교해야하지 않나요? bcrypt.compare(password, user.password) 기존 password와 사용자가 입력한 password를 이렇게 단순 비교해도 성공하는 이유가 무엇인가요? 이렇게 되면 salt를 사용할 필요가 없지 않나 생각이 듭니다.
- 미해결따라하며 배우는 NestJS
deleteBoard 코드 작성하실 때 파라미터 레벨 파이프로 확인하는 것과 타입을 직접 지정해주는 것과 차이점이 있을까요?
안녕하세요 존안 강사님! 양질의 강의 정말 감사합니다 ㅎㅎ 강의중 궁금한게 있는데 controller에서 deleteBoard 작성하실 때 이렇게 파라미터 레벨 파이프를 통해 타입을 확인해 주셨는데 아래와 같이 타입스크립트의 기능으로 타입을 확인하는 것과 차이점이 있나요?
- 미해결따라하며 배우는 NestJS
useGards데코레이터 이후 Unauthorized입니다..
로그인으로 발급받은 토큰을 Bearer Token으로 두고 포스트 리퀘스트를 보내면 권한이 막히네요.. JWT.io사이트에서 로그인후 발급받은 토큰을 검증해봐도 정상적이라 나오고 설정시 이용하는 키도 잘 적어줫는데.. 무슨일일까요