46,200원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
예외관련하여 질의드립니다!
안녕하세요!! 강의 잘듣고있습니다 예제에선 throw new Exception으로 예외를 발생시켰는데 실무에서는 어떤방식으로 예외를 처리할까요? Trry-catch 활용해서 요청에 예외를 처리하여 예제처럼 필터를할까요?
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
한글 공식문서
안녕하세요!링크로 남겨주신 한글 공식문서가 404 Not Found로 표시됩니다.크롬에서 번역을 해서 보면 되긴 하지만...혹시 제대로 nest에 대한 번역을 지원하고 있는 사이트가 있을까요?카카오 오픈톡방이나 여러 사이트를 찾아봤지만 번역을 하시다가 중도에 지원을 안하는게 많았어서 혹시 알고 계시는게 있을까 하고 질문드립니다!
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
express_1.default is not a function [해결 방법]
링크https://stackoverflow.com/questions/34520288/node-js-typescript-unclear-syntax-with-type-script-compiled-code해결 방법tsconfig.json 파일에 추가."esModuleInterop": true,
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
npm run test:e2e
수강생분들의 질문을 기다립니다! - 에러에 해당하는 질문은 "에러가 발생한 상황에 대한 충분한 설명", "에러 메세지", "에러가 난 코드 스크린샷"을 함께 첨부해주세요. - 언어에 해당하는 질문은 구글링 및 서치 후에 구체적으로 질문해주시면 좋습니다. - 간단한 진로 및 방향성에 대한 질문은 메일로 보내주세요.- 패키지 버전 관리은 실무 환경과 트랜드에 맞추어 강의를 업데이트 하고 있습니다. 강의를 그대로 따라갔는데 에러가 발생한다면 패키지 버전을 강의에서 사용하는 버전과 동일하게 맞춰주세요!- 강의 노트, QA 목록, 공지 사항을 먼저 확인해주세요.- 논리적이고 구체적인 질문은 학습 효과를 올립니다 :) 강의를 보시다가 혹시나 npm run test:e2e 를 돌려봤는데 npm ERR! code ELIFECYCLEnpm ERR! errno 1npm ERR! amamov.com@1.8.0 test:e2e: jest --config ./test/jest-e2e.jsonnpm ERR! Exit status 1npm ERR! npm ERR! Failed at the amamov.com@1.8.0 test:e2e script.npm ERR! This is probably not a problem with npm. There is likely additional logging output above.npm ERR! A complete log of this run can be found in:npm ERR! /Users/anhyeongjun/.npm/_logs/2022-10-13T13_02_17_408Z-debug.log이런 error를 맞이하신다면 { "moduleFileExtensions": ["js", "json", "ts"], "rootDir": ".", "testEnvironment": "node", "testRegex": ".e2e-spec.ts$", "transform": { "^.+\\.(t|j)s$": "ts-jest" }, "moduleNameMapper": { "^src/(.*)$": "<rootDir>/../src/$1" } } moduleNameMapper이부분이 들어가있는지 확인하신 후 없으면 넣어주면 test가 성공적으로 진행될 수 있습니다. 다만 윤상석 선생님 추가해서 test를 돌려보면 Jest did not exit one second after the test run has completed.This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with --detectOpenHandles to troubleshoot this issue. 이런 오류가 나는데 이유가 무엇일까요?
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
프로젝트 폴더 구조에 대해서 질문드립니다.
수강생분들의 질문을 기다립니다! - 에러에 해당하는 질문은 "에러가 발생한 상황에 대한 충분한 설명", "에러 메세지", "에러가 난 코드 스크린샷"을 함께 첨부해주세요. - 언어에 해당하는 질문은 구글링 및 서치 후에 구체적으로 질문해주시면 좋습니다. - 간단한 진로 및 방향성에 대한 질문은 메일로 보내주세요.- 패키지 버전 관리은 실무 환경과 트랜드에 맞추어 강의를 업데이트 하고 있습니다. 강의를 그대로 따라갔는데 에러가 발생한다면 패키지 버전을 강의에서 사용하는 버전과 동일하게 맞춰주세요!- 강의 노트, QA 목록, 공지 사항을 먼저 확인해주세요.- 논리적이고 구체적인 질문은 학습 효과를 올립니다 :) 안녕하세요 상석님 강의 잘 보고있습니다.구현중 궁금한것이 생겨서 질문드립니다.컨트롤러나 서비스를 강의에서는각 기능별로 폴더를 만들어서 생성하는데NestJs에서는 MVC패턴처럼 모델과 컨트롤러를 폴더로 따로 분리해서 사용하지않는것이 권장되는지 궁금해서 문의드립니다.
- 해결됨탄탄한 백엔드 NestJS, 기초부터 심화까지
PositiveIntPipe 로 value가 안넘어 갑니다.
cats.controller.tsimport { CatsService } from './cats.service'; import { Controller, Delete, Get, HttpException, Param, ParseIntPipe, Patch, Post, Put, UseFilters, } from '@nestjs/common'; import { HttpExceptionFilter } from 'src/common/exceptions/http-exception.filter'; import { PositiveIntPipe } from 'src/common/pipes/positiveInt.pipe'; @Controller('cats') @UseFilters(HttpExceptionFilter) export class CatsController { constructor(private readonly catsService: CatsService) {} @Get() getAllCat() { throw new HttpException('api is broken', 401); //throw new HttpException({ success: false, message: 'api is broken' }, 401); return 'get all cat api'; } @Get(':id') getOneCat(@Param('id', ParseIntPipe, PositiveIntPipe) param: number) { //console.log('param!!!!!', param); //console.log('type of param!!!!!', typeof param); return 'get one cat api'; } @Post() createCat() { return 'create cat api'; } @Put(':id') updateCat() { return 'update cat api'; } @Patch(':id') updatePartialCat() { return 'update partial cat api'; } @Delete(':id') deleteCat() { return 'delets cat api'; } } positiveInt.pipe.tsimport { Injectable, PipeTransform, HttpException } from '@nestjs/common'; @Injectable() export class PositiveIntPipe implements PipeTransform { transform(value: number) { console.log('value', value); if (value < 0) { throw new HttpException('value > 0', 400); } return value; } } main.tsimport { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { HttpExceptionFilter } from './common/exceptions/http-exception.filter'; async function bootstrap() { const app = await NestFactory.create(AppModule); app.useGlobalFilters(new HttpExceptionFilter()); await app.listen(3000); } bootstrap(); 이 상태에서 -2.2를 요청했는데 아래와 같이 나옵니다.value가 positiveInt.pipe.ts 로 넘어가지 않는것 같은데뭐가 잘못 됐을까요?
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
Reflect.defineMetadata is not a function 에러
npm run start:dev로 서버를 켰는데 TypeError: Reflect.defineMetadata is not a function이런 에러가 떴어요.제가 어떤 설정을 잘못 한건가요? 현재 DTO패턴 강좌입니다.npm install @types/reflect-metadata 도 사용 하였습니다.pakage.jsonhttps://github.com/Seonooo/project여기에 파일 올려두었습니다.
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
Module Provider 관련 추가 질문
먼저 보다 자세한 설명을 해주기 위해 이렇게 보충강의도 올려주신점 감사드립니다! 그리고 설명도 이해가 아주 잘 되었습니다.간단한 질문인데요, 비단 AppModule 뿐만 아니라 A Module에서 B Module의 Provider를 등록하면 결과적으로 의존성 주입이 되서 서버가 실행되더라구요 원래 그런건가요 ?? 그리고 결국 이것도 안좋은 패턴이니 하지 말아야하는게 맞겠죠 ?
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
DI(의존성 주입)을 왜 해야하나요?
cats.service.ts 파일import { Injectable } from '@nestjs/common'; @Injectable() export class CatsService { getAllCats(): string { return 'get all cats1'; } } export const getAllCatsTest = () => { return 'get all cats2'; }; cats.controller.ts 파일import { CatsService } from './cats.service'; import * as catsService2 from './cats.service'; import { Controller, Get, } from '@nestjs/common'; @Controller('cats') export class CatsController { constructor(private catsService: CatsService) {} @Get() getAllCat() { return this.catsService.getAllCats(); } @Get('2') getAllCat2() { return catsService2.getAllCatsTest(); } } Dependency Injection을 사용해야하는 이유가 명확히 이해가 안됩니다. A라는 클래스에서 B라는 클래스를 인스턴스화 (new 키워드 사용) 했을 때, A클래스가 B클래스에 대해서 의존성이 발생하고만약에 B 클래스의 수정점이 발생한다면, A클래스도 수정해줘야하는 부분은 인지를 했습니다. 그런 경우에 변화를 유연하게 대응하기 위해 A클래스에서 직접 인스턴스화를 하는것이 아니라,인스턴스화된 클래스를 주입받아 사용만 하는걸 Dependency Injection(의존성 주입)으로 이해했습니다. 하지만, import해서 쓰면 되는걸 왜 굳이 의존성주입이라는 형태로 사용해야하는지 이해를 못했습니다. 제가 위에 예시로 작성한 service 파일과 controller를 보시면,getAllCat()는 의존성 주입해서 사용한거고, getAllCat2는 import한 서비스를 사용한겁니다. 어떠한 이유에서 의존성 주입의 개념을 사용해야하는지 명쾌하게 알고 싶습니다.
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
몽고db 연결이 안됩니다.
2022년 10월 9일 기준으로 모든 패키지 설치했습니다.아래 내용을 봐주시고 어느 부분에서 에러가 나는 건지 알려주시면 감사하겠습니다.패키지 버전 문제인 건지, 아니면 다른 몽고db 네트워크 설정 문제인 건지 저는 모르겠네요.pakage.json - 패키지 버전{ "dependencies": { "@nestjs/common": "^9.0.0", "@nestjs/config": "^2.2.0", "@nestjs/core": "^9.0.0", "@nestjs/mongoose": "^9.2.0", "@nestjs/platform-express": "^9.0.0", "class-transformer": "^0.5.1", "class-validator": "^0.13.2", "mongoose": "^6.6.5", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", "rxjs": "^7.2.0" }, "devDependencies": { "@nestjs/cli": "^9.0.0", "@nestjs/schematics": "^9.0.0", "@nestjs/testing": "^9.0.0", "@types/express": "^4.17.13", "@types/jest": "28.1.8", "@types/node": "^16.0.0", "@types/supertest": "^2.0.11", "@typescript-eslint/eslint-plugin": "^5.0.0", "@typescript-eslint/parser": "^5.0.0", "eslint": "^8.0.1", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", "jest": "28.1.3", "prettier": "^2.3.2", "source-map-support": "^0.5.20", "supertest": "^6.1.3", "ts-jest": "28.0.8", "ts-loader": "^9.2.3", "ts-node": "^10.0.0", "tsconfig-paths": "4.1.0", "typescript": "^4.7.4" } }에러화면 - npm run start:dev.env 파일 내용MONGODB_URI="mongodb+srv://<id>:<pw>@dbtest.0lqasde.mongodb.net/test" PORT=3000 MODE='dev'.env 파일 위치 및 app.module.ts 코드 화면app.module.tsimport { MiddlewareConsumer, Module } from '@nestjs/common'; import { NestModule } from '@nestjs/common/interfaces/modules'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { CatsModule } from './cats/cats.module'; import { LoggerMiddleware } from './common/middlewares/logger.middleware'; import { MongooseModule } from '@nestjs/mongoose'; import * as mongoose from 'mongoose'; import { ConfigModule } from '@nestjs/config'; @Module({ imports: [ ConfigModule.forRoot(), MongooseModule.forRoot(process.env.MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, useFindAndModify: false, }), CatsModule, ], controllers: [AppController], providers: [AppService], }) export class AppModule implements NestModule { private readonly isDev: boolean = process.env.MODE === 'dev' ? true : false; configure(consumer: MiddlewareConsumer) { consumer.apply(LoggerMiddleware).forRoutes('*'); mongoose.set('debug', this.isDev); } } main.ts 파일import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { HttpExceptionFilter } from './common/exceptions/http-exception.filter'; async function bootstrap() { const app = await NestFactory.create(AppModule); app.useGlobalFilters(new HttpExceptionFilter()); const PORT = process.env.PORT; await app.listen(PORT); } bootstrap(); mongodb - compass 화면mongodb data access 화면 - admin 권한 부여ip address 접근 권한 화면 - 어느 위치에서도 접근 가능하게 설정
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
이전 강의에서 catch에서 오류나는 분들 & CREATE 안되시는 분들 위해 남깁니다.
질문은 아니고 조금 시간 쓴 부분이 있어 전달드려요~강의를 따라 진행하다보면 try~catch문에서 error부분에 타입지정이 안되어 오류 발생.=> tsc v4.4부터 catch의 error object 정의가 변경되었습니다. 기존에는 error: any 였기 때문에, 타입 지정을 하지 않아도 오류가 발생하지 않습니다. 버전 변경하시거나 error: any 붙여주시면 정상 동작합니다.Cat CREATE이 되지 않는 분들=> POSTMAN에 ReqBody 옆에 보면 타입 지정하는 부분이 있습니다. 저의 경우엔 이 부분이 text로 되어 있어서 안됐었네요. JSON으로 변경하시면 정상 동작합니다. 다들 수고하세요 :)
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
npm i를 하면 에러가 납니다.
수강생분들의 질문을 기다립니다! - 에러에 해당하는 질문은 "에러가 발생한 상황에 대한 충분한 설명", "에러 메세지", "에러가 난 코드 스크린샷"을 함께 첨부해주세요. - 언어에 해당하는 질문은 구글링 및 서치 후에 구체적으로 질문해주시면 좋습니다. - 간단한 진로 및 방향성에 대한 질문은 메일로 보내주세요.- 패키지 버전 관리은 실무 환경과 트랜드에 맞추어 강의를 업데이트 하고 있습니다. 강의를 그대로 따라갔는데 에러가 발생한다면 패키지 버전을 강의에서 사용하는 버전과 동일하게 맞춰주세요!- 강의 노트, QA 목록, 공지 사항을 먼저 확인해주세요.- 논리적이고 구체적인 질문은 학습 효과를 올립니다 :) PS C:\Users\pc\Desktop\node_rkddml> npm inpm ERR! code ENOENTnpm ERR! syscall opennpm ERR! path C:\Users\pc\Desktop\node_rkddml/package.jsonnpm ERR! errno -4058npm ERR! enoent ENOENT: no such file or directory, open 'C:\Users\pc\Desktop\node_rkddml\package.json'npm ERR! enoent This is related to npm not being able to find a file.npm ERR! enoentnpm ERR! A complete log of this run can be found in:npm ERR! C:\Users\pc\AppData\Local\npm-cache\_logs\2022-10-01T07_05_11_752Z-debug-0.log PS C:\Users\pc\Desktop\node_rkddml>
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
바로 app.ts를 실행시키지 않고 왜 dist의 app.js를 실행시키나요
수강생분들의 질문을 기다립니다! - 에러에 해당하는 질문은 "에러가 발생한 상황에 대한 충분한 설명", "에러 메세지", "에러가 난 코드 스크린샷"을 함께 첨부해주세요. - 언어에 해당하는 질문은 구글링 및 서치 후에 구체적으로 질문해주시면 좋습니다. - 간단한 진로 및 방향성에 대한 질문은 메일로 보내주세요.- 패키지 버전 관리은 실무 환경과 트랜드에 맞추어 강의를 업데이트 하고 있습니다. 강의를 그대로 따라갔는데 에러가 발생한다면 패키지 버전을 강의에서 사용하는 버전과 동일하게 맞춰주세요!- 강의 노트, QA 목록, 공지 사항을 먼저 확인해주세요.- 논리적이고 구체적인 질문은 학습 효과를 올립니다 :) build후 app.js를 실행시키는 것과 app.ts를 실행하는 것의 차이가 있을까요??ts-node 같은 것을 활용하면 바로 실행이되는데 왜 js로 빌드하는 것인지?? 궁금해요!!호환성 때문일까요??
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
TypeError: Reflect.defineMetadata is not a function
npm run start:dev로 서버를 켰는데 TypeError: Reflect.defineMetadata is not a function이런 에러가 떴어요.제가 어떤 설정을 잘못 한건가요? 현재 DTO패턴 강좌입니다.
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
Service에서는 유효성 검사를 안해도 되나요?
안녕하세요. 강의를 보고 개인 프로젝트를 하고 있습니다.현재 POST users/:id API를 만들었습니다.여기서 id는 mongodb의 objectid입니다.service에 objectid가 아닌 데이터가 전달되면 오류가 발생하기에 컨트롤러에서 직접 만든 MongoIdPipe로 유효성 검사를 해주고 있습니다.문제는 다른 미들웨어에서 해당 서비스를 주입받아 사용하고 있는데 미들웨어는 pipe을 주입받지 않았기 때문에 서비스에 잘못된 값을 전달 할 시 오류가 발생할 수 있다는 것입니다. 그렇다고 서비스에 유효성 검사 로직을 넣으면 코드가 지저분해지는데 이를 어떻게 해결해야 할까요?미들웨어에서 유효성 검사를 하고 서비스를 호출하는 것이 맞는 방향일까요?
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
네이버 api 요청 관련 질문 있습니다
네이버 api 요청 관련 질문 있습니다github:https://github.com/hyunsokstar/naver-add-prototype back:npm run start:dev front:npm run dev controller 에서 http://localhost:8000/naver_add 요청을 받으면 네이버 광고에 api 요청(https://naver.github.io/searchad-apidoc/#/guides) 을 날려서 응답 받은걸 다시 프론트로 보내려고 하는데요 참고 문서는 https://ukcasso.tistory.com/99 이고 컨트롤러와 서비스는 다음과 같습니다.https://github.com/hyunsokstar/naver-add-prototype/blob/main/backend/src/naver_add/naver_add.controller.tshttps://github.com/hyunsokstar/naver-add-prototype/blob/main/backend/src/naver_add/naver_add.service.ts 그런데 헤더 설정이 잘못되어서인지 import { NaverAddService } from './naver_add.service';import { SuccessInterceptor } from './../common/interceptors/success.interceptor';import { Controller, Get, Req, UseInterceptors } from '@nestjs/common';// import CryptoJS from "crypto-js";import * as CryptoJS from 'crypto-js'var method = "GET";var api_url = "/keywordstool";var timestamp = Date.now() + '';const accessKey = "01000000000f85a84ea950600f3a5a2214f5f379afa3f09898cbf7a1699007c1167fe2e247"var secretKey = "AQAAAAAPhahOqVBgDzpaIhT183mv52WgZFJyJCX8PE87IzXJwg==";var method = "GET";var timestamp = Date.now() + '';var secretKey = "YOUR_SECRETKEY";var hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, secretKey);hmac.update(timestamp + '.' + method + '.' + api_url);var hash = hmac.finalize();hash.toString(CryptoJS.enc.Base64);@Controller('naver_add')@UseInterceptors(SuccessInterceptor)export class NaverAddController { constructor( private readonly naverAddService: NaverAddService ) { } @Get() getNaverAddInfo() { const api_key = process.env.API_KEY; const secret_key = process.env.SECRET_KEY; const customer_id = process.env.CUSTOMER_ID; const options = { url: 'https://api.naver.com/keywordstool?hintKeywords=' + "skilnote" + '&showDetail=1', headers: { 'X-Timestamp': timestamp, 'X-API-KEY': api_key, 'X-API-SECRET': secret_key, 'X-CUSTOMER': customer_id, 'X-Signature': hash.toString(CryptoJS.enc.Base64) } }; // const result = this.naverAddService.getNaverAddInfo(options).subscribe( // res => { // console.log(res); // }); const result = this.naverAddService.getNaverAddInfo(options).pipe().subscribe() console.log("result : ", result); // return result }} 요청 자체는 성공으로 출력 되지만 콘솔에 이런 에러가 발생 합니다. http://www.skilnote-for-starter.shop/wm/myshortcut/trouble-shotting/1혹시 해결 방법 알려주시면 감사요 그리고 혹시 멘토링 같은건 안해주시나요 주말이든 주중이든 채팅이나 직접 만나서든 배우고 싶습니다.
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
Return type을 꼭 명시해야 하나요?
안녕하세요. 강의 수강 후 개인 프로젝트를 해보고 있는 신입 개발자입니다.기존에 JS로만 개발을 하다가 Nest.js를 사용하다 보니 헷갈리는 것이 있어 질문 드립니다.controller에 있는 함수나 service의 함수를 만들 때 return type을 꼭 명시해줘야 하는지 궁금합니다.개인적으로는 명시하는 것이 좋은 것 같은데 해당 강의를 보면 꼭 명시하는 것 같지는 않더라구요.만약 명시한다면 dto를 만들어서 붙여주면 되는 것일까요? 아니면 다른 방법이 있을까요?질문 읽어주셔서 감사합니다.
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
Jest 에러 테스트 관련해서 질문드립니다.
expect({ ...new HttpException('dg', 400) }).toMatchObject({ ...new HttpException('dg', 500), }); expect(new HttpException('dg', 400) }).toMatchObject( new HttpException('dg', 500), ); 위에 테스트는 통과가 되지만 아래코드는 통과가 되지않는데 그이유를 알수있을까요.. 또 service단 unit테스트를 진행할때 예를들어 async getUser({ id }: Pick<Parameter, 'id'>) { const user = await this.userRepository.find({ where: { status: 'ACTIVE', id, }, }); if(!user){ throw new HttpException("존재하지않는 유저입니다.", 400); } return user; }이것에대한 테스트중 유저가 존재하지않을 경우를 테스트하고싶은데 try catch 이용하는것말고는 방법이 없을까요?
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
몽구스 연결 오류
안녕하세요! 몽구스 연결 오류가 나서 질문드려요!MongooseCoreModule 컨텍스트에서 ModuleRefat index [1] 인수를 사용할 수 있는지 확인하십시오.이게 어떤 오류인지 알수있을까요...ㅠㅠ
- 미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
혹시 저처럼 s3에 업로드할 때 아무 이미지도 안 올라시는 분들이 있으면 봐주세요
혹시 저처럼 buffuer가 찍히지 않으신 분들은storage에 multer.memoryStage()를 추가하면 buffer가 찍히실 겁니다.https://github.com/expressjs/multer#memorystorage