Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- flask
- JavaScript
- cookie
- TypeScript
- Dinosaur
- typeORM
- game
- MongoDB
- Python
- class
- Queue
- GIT
- Express
- react
- nestjs
- 정렬
- 자료구조
- dfs
- Sequelize
- mongoose
- Bull
- AWS
- 공룡게임
- jest
- 게임
- OCR
- nodejs
- MySQL
- Nest.js
Archives
- Today
- Total
포시코딩
[Nest.js] 4. 게시판 만들기 - Service 본문
728x90
서비스 작성
import _ from 'lodash';
import { Injectable, NotFoundException, UnauthorizedException } from '@nestjs/common';
@Injectable()
export class BoardService {
// 원래는 Repository를 참조하여 비지니스 로직을 실행하기 위해 데이터베이스와 통신을 함
// 하지만, 여기선 편의성을 위하여 인-메모리 변수로 해결
private articles = [];
private articlePasswords = new Map();
getArticles() {
return this.articles;
}
getArticleById(id) {
return this.articles.find((article) => {
return article.id === id;
});
}
createArticle(title: string, content: string, password: number) {
// id를 먼저 매겨야 한다.
// 1부터 시작 -> 현재 배열의 크기 + 1 ->
const articleId = this.articles.length + 1;
this.articles.push({ id: articleId, title, content });
this.articlePasswords.set(articleId, password);
return articleId;
}
updateArticle(id: number, title: string, content: string, password: number) {
if (this.articlePasswords.get(id) !== password) {
throw new UnauthorizedException('Password is not correct. id: ' + id);
// nest.js에서는 status code와 예외에 대해서 최소한으로 생각할 수 있게
// 자체적으로 예외를 제공하고 있다.
}
const article = this.getArticleById(id);
if (_.isNil(article)) {
throw new NotFoundException('Article not found. id: ' + id);
}
article.title = title;
article.content = content;
}
deleteArticle(id: number, password: number) {
if (this.articlePasswords.get(id) !== password) {
throw new UnauthorizedException('Password is not correct. id: ' + id);
}
this.articles = this.articles.filter((article) => {
return article.id !== id;
})
}
}
이전 글에서 만들었던 controller와 그에 따른 service의 메소드들을 만들었다.
DB 대신 인메모리 변수를 사용했고
그 외 특이사항에 대해 아래에 정리해보았다.
_.isNil()
그동안 어떤 값이 null이나 undefined일 경우를 체크할 때
if (!체크) {}
와 같은 형식으로 했는데 솔직히 이게 좋지 않은 코드인걸 알고 있었지만
간편하기 때문에 써왔었다.
이번에 lodash를 배우면서 새롭게 알게 되었는데
https://www.geeksforgeeks.org/lodash-_-isnil-method/
if (_.isNil(체크)) {}
이렇게 null, undefined를 체크하는게 훨씬 안전해보인다.
예외처리
import { NotFoundException, UnauthorizedException } from '@nestjs/common';
throw new UnauthorizedException('Password is not correct. id: ' + id);
throw new NotFoundException('Article not found. id: ' + id);
Nest.js에서는 HTTP status code와 예외에 대한 생각도 최소한으로 할 수 있게
자체적으로 예외를 제공하고 있다.
위의 UnauthorizedException, NotFoundException 말고도 많으니
상황에 맞게 import 해서 사용하면 될 것이다.
728x90
'Node.js' 카테고리의 다른 글
[Nest.js] 6. TypeORM 설치 및 세팅 - @nestjs/config 사용법 (0) | 2023.02.16 |
---|---|
[Nest.js] 5. 게시판 기능 확인과 class-transformer 사용 (0) | 2023.02.09 |
[Nest.js] 3. 게시판 만들기 - Controller (0) | 2023.02.09 |
[Nest.js] 2. 게시판 만들기 세팅 (0) | 2023.02.09 |
[Nest.js] 1. 시작하기 (0) | 2023.02.09 |