티스토리 뷰

이전 포스트에서 설명했듯이 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들을 제작해 보겠다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함