[문제사항] Node.js 버젼이 구버젼(v.14.9.0) 으로 고정되는 현상이 생겼다. 구버젼 노드를 사용하게되면 gitmoji 도 지원하지 않는다. 그런데 현제 노드는 18버젼을 지원한다. 계속 수동으로 현재 lts 버젼으로 Command 명령어를 입력해야되는 귀찮음이 생겼다... $ nvm install --lts 매번 프로젝트마다 zsh을 열때마다 node의 버젼을 수정해야된다... 너무 귀찮아서 결국은 찾게됐다! (1) 내가 갖고 있는 node 버젼을 확인해보자 $ nvm ls (2) 16버젼을 사용하자 $ nvm use 16 nvm 16 이상으로 설정하면 gitmjoi 는 정상동작한다. (3) 구버젼 노드는 uninstall 한다 $ nvm uninstall 14 (4) 이대로 만족하기에는 의..
NestJS Joi 설치 $ npm install --save joi // app.module.ts import Joi from 'joi'; @Module({ imports: [ ConfigModule.forRoot({ envFilePath: '.env', isGlobal: true, validationSchema: Joi.object({ NODE_PORT: Joi.string().required(), SESSION_ID: Joi.string().required(), COOKIE_SECRET: Joi.string().required(), }), }), MongooseModule.forRootAsync({ useFactory: () => ({ uri: process.env.MONGODB_URI, }), }..
패키지 설치 $ npm i @nestjs/config $ npm i @nestjs/mongoose mongoose $ npm i dotenv @types/dotenv - 필자는 몽고디비 altas를 사용한다. 그러므로 .env에서 mongodb uri를 불러와야하는데 이때 꼭 필요한 모듈이 @nestjs/config 이다. process.env.MONGODB_URI 보다는 configService.get('MONGODB_URI') 를 쓰는게 좋다 configs 디렉토리에 module 과 service 생성 - mongodb-config.service.ts // path: /src/config/mongodb-config.service.ts import { Injectable } from '@nestjs/c..
[목적] 지난 프로젝트에서는, 서비스 생성자에 엔티티모델을 주입하여 Service 단에서 데이터베이스를 호출하여 비즈니스로직을 만들었다. 클라이언트 >> 라우터 + 컨트롤러 >> 서비스 >> 데이터베이스 위와 같이 서비스 로직내부에서 데이터베이스를 호출시켜 트랜잭션을 처리하는 것은 여러모로 문제가 있다. 서비스 로직에서 데이터베이스를 호출하여 트랜잭션 처리를 할 수있다만... 비즈니스 로직에 집중하기 어렵다. 비즈니스 로직 자체를 테스트도 어렵고 중복된 코드가 발생한 가능성이 높다. 즉, 비즈니스로직이 길어지기도하고, 가독성이 떨어진다. 아주 바보같은 코드군.... if문안에 if를 넣었어.... 리팩토링마렵다..... // 지난주 프로젝트 : /src/posts/posts.service.ts impor..
Logging 로그는 동작 과정을 남기고 에러의 원인을 추적할 수 있다. 로그 덕분에 에러의 원인을 파악할 수 있는 시간을 줄일 수 있다. NestJS에서 제공하고 있는 내장로거는 파일, 데이터베이스 로 저장하는 기능을 제공하지 않는다. 이를 위해서는 커스텀 로거를 만들어야한다. 느려도 좋으니까, 다큐먼트 읽으면서 천천히 꼭꼭씹어먹으면서 이해하는 것을 포커스 뒀다. [ 내장 Logger 활용하기 ] // app.service.ts import { Injectable, Logger } from '@nestjs/common'; @Injectable() export class AppService { private readonly logger = new Logger(AppService.name); getHell..
목표: 커스텀 에러 예외처리를 만들기 throw new NotFoundMarketData() - 커스텀 에러 메시지를 만든다. - 커스텀 에러 발생시, 프로젝트가종료되지 않는다. - 커스텀 에러 발생시, 로그를 남긴다. 문제사항 예외가 발생했을 때, 로그의 기록도 내장예외를 사용했을 때와 달랐다. 커스텀 에러도 내장예외때처럼 사용할 수 있는 방법이 없을까? - posts-exception.ts export class EmptyPostPasswordException extends HttpException { constructor() { super('비밀번호를 입력해주세요!', HttpStatusCode.BadRequest); } } - posts.service.ts async createPost( user..
1. 상황별로 받을 수 있게 하면 안될까? (상황) 모든 게시물들을 불러올 수 있는 API는 [GET] /api/posts/ 이다. 여기서 조건이 있다. 조건1: 게시글이 중복으로 나타내지 않는다 조건2: 한 페이지당 20개 단위로 조건3: 최신글이 먼저 나오도록 조건3은 order by 로 하면 될 것 같고 조건1, 조건2 를 페이지네이션으로 구현하기로 했다. 페이지네이션은 page와 pageSize로 구성되어있으며, 한 페이지당 보여줄 수 있는 게시물의 수를 제한시키는 것이다. 그리고 페이지별로 게시물의 수가 다르게 나타나야한다. 페이지네이션은 게시글 목록에서 페이징을 나타낼 수도 있지만, 스크롤을 내릴 때마다 글들이 계속 랜더링되는 것도 해당한다. 아래는 페이지네이션의 예시이다. 마우스를 스크롤 내..
[ Cannot find module 해결하기 ] (에러문) Cannot find module 'src/entities/enums/PostType' from 'posts/posts.service.ts' (해결책) package.json 에서 "roots", "modulePaths", "moduleDirectories", "moduleNameMapper" 추가 moduleNameMapper 은 jest가 파일을 찾는 방식을 나타낸다. jest는 절대경로를 파악하지 못하고, 상대경로로 파일의 위치를 파악한다. { ... , "jest": { "moduleFileExtensions": ["js","json","ts"], "rootDir": "src", "roots": [ "" ], "modulePaths": ..
- Total
- Today
- Yesterday
- 클린아키텍쳐
- 나도 할 수 있다
- 개발용어
- Nest.js
- 참고
- MySQL
- TDD
- git
- 스마트폰중독
- 갓생살자
- IT용어
- 한달독서
- 디지털디톡스
- nestjs
- Mongoose
- Jekyll
- nestjs jest
- MongoDB
- OS
- 바이트디그리
- jest
- RDBMS
- 습관개선
- vscode
- typeORM
- node.js
- 한달어스
- TypeScript
- 미완
- gem
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |