티스토리 뷰
이전 포스트에서 설명했듯이 url에 있는 id값을 통해 추가적인 작업을 수행해야 한다.
만약 Express와 같은 프레임워크를 사용했다면 body-parser와 같은 미들웨어를 통해 이 작업을 매우 편리하고 손쉽게 처리할 수 있을 것이다.
그러나 그런 프레임워크의 도움 없이 서버를 만들고자 하기에 조금 귀찮은 방법을 사용했다.
바로 정규식을 이용하는 것이다.
먼저 이전에 사용했던 정규식을 다음과 같이 저장했다.
const POST_ID_REGEX = /^\/posts\/[a-zA-Z0-9-_]+$/
다음 이 정규식을 실행할 것인데 우리가 필요로 하는 id부분을 따로 추출 하기 위하여
const POST_ID_REGEX = /^\/posts\/([a-zA-Z0-9-_]+)$/
이렇게 괄호를 통해 감싸주자.
그 다음 const regexResult = POST_ID_REGEX.exec(req.url)
로 정규식을 실행하자.
이렇게 한다음 결과를 확인해 보면 /posts/3
으로 접속하였을 때,
이러한 결과를 확인할 수 있다.
이제 우리가 원하는 결과는 regexResult[1]
에 있게 된다.
위 로직을 적용하여 코드를 다음과 같이 수정했다.
const server = http.createServer((req, res) => {
const POST_ID_REGEX = /^\/posts\/([a-zA-Z0-9-_])+$/
const regexResult = (req.url && POST_ID_REGEX.exec(req.url)) || undefined
if (req.url === '/posts' && req.method === 'GET') {
res.statusCode = 200
res.end('[GET]posts')
} else if (regexResult) {
const postId = regexResult[1]
res.statusCode = 200
res.end(`[GET]posts/${postId}`)
} else if (req.url === '/posts' && req.method === 'POST') {
res.statusCode = 200
res.end('[POST]posts')
} else {
res.statusCode = 404
res.end('Not Found')
}
})
regexResult 변수에 정규식을 실행한 결과를 담고, 일치하는 결과가 없다면 undefined이다.
이렇게하면 id로 접근했을 때에만 해당하는 개체가 regexResult에 담기게 되고 그 의미는 곧 posts/:id
로 접속을 했다는 의미이므로 regexResult의 유무를 통해 분기처리를 해줄 수 있다.
그리고 분기문 내에서 postId의 값을 받아와 id를 통한 활용이 가능하다.
이제 사용자의 URL과 요청에 따라 분기를 나눠주는 작업을 수행했다.
다음엔 실제 서비스에 필요한 api들을 제작해 보겠다.
'Node.js' 카테고리의 다른 글
Node.js 모듈의 require, exports, module.exports (0) | 2021.07.15 |
---|---|
Node.js로 프레임워크 없이 간단한 RESTful API 서버 만들기 (4) (0) | 2021.07.14 |
Node.js로 프레임워크 없이 간단한 RESTful API 서버 만들기 (2) (0) | 2021.07.13 |
Node.js로 프레임워크 없이 간단한 RESTful API 서버 만들기 (1) (0) | 2021.07.13 |
Node.js 기초 개발환경 셋업하기 (0) | 2021.07.13 |
- Total
- Today
- Yesterday
- 벨만포드
- 그래프
- 알고리즘
- 세그먼트 트리
- typeORM
- 그리디
- 자바스크립트
- 구현
- 투포인터
- node.js
- 재귀
- 백준
- 자바
- boj
- BFS
- 중앙대학교
- nestjs
- 백트래킹
- dfs
- Computer Architecture
- 시뮬레이션
- nest.js
- ReactNative
- nodeJS
- 스레드
- 컴퓨터 구조
- 컴퓨터 통신
- 예외처리
- java
- 동적계획법
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |