인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

Donggun Jang님의 프로필 이미지
Donggun Jang

작성한 질문수

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

POST, PUT, DELETE 요청 보내기

수업 내용에 대해 질문드립니다.

작성

·

438

·

수정됨

0

안녕하세요

http.createServer(async (req, res) => {
  try {
    if (req.method === 'GET') {
      if (req.url === '/') {
        const data = await fs.readFile(path.join(__dirname, 'restFront.html'));
        res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
        return res.end(data);
      } else if (req.url === '/about') {
        const data = await fs.readFile(path.join(__dirname, 'about.html'));
        res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
        return res.end(data);
      } else if (req.url === '/users') {
        res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
        return res.end(JSON.stringify(users));
      }
      // /도 /about도 /users도 아니면
      try {
        const data = await fs.readFile(path.join(__dirname, req.url));
        return res.end(data);
      } catch (err) {
        // 주소에 해당하는 라우트를 못 찾았다는 404 Not Found error 발생
      }

 

restFront.js , restFront.css 등을 받아오는 try 부분에서

강의에는 const data = await fs.readFile(`.${req.url)`);로 수업하셨는데

책과 깃헙예제에는 const data = await fs.readFile(path.join(__dirname, req.url)); 로 되어있어가지구요

1. .${req.url}에서 백틱과 .은 꼭 쓰여야 하는건지랑

2. 책의 예제코드에서 __dirname의 경로는 restServer.js가 있는 위치가 기준이 되는건지 질문드립니다.

 

else if (req.method === 'POST') {
      if (req.url === '/user') {
        let body = '';
        // 요청의 body를 stream 형식으로 받음
        req.on('data', (data) => {
          body += data;
        });
        // 요청의 body를 다 받은 후 실행됨
        return req.on('end', () => {
          console.log('POST 본문(Body):', body);
          const { name } = JSON.parse(body);
          const id = Date.now();
          users[id] = name;
          res.writeHead(201, { 'Content-Type': 'text/plain; charset=utf-8' });
          res.end('등록 성공');
        });
      }
    }

return req.on('end', () =>{}) 에서 'end'라는 이벤트가 어느 부분에서 발생해서 저기 들어가는건지도 궁금합니다.

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

  1. 네 맞습니다. 다만 path.join이 더 권장되는 코드입니다.

  2. 네 해당 파일이 있는 폴더입니다.

  3. req.on end는 요청이 다 들어온 순간 노드에서 알아서 end 이벤트를 발생시킵니다. 그 때 실행되는 코드입니다

Donggun Jang님의 프로필 이미지
Donggun Jang
질문자

감사합니다!

Donggun Jang님의 프로필 이미지
Donggun Jang

작성한 질문수

질문하기