Uncaught (in promise) SyntaxError: Unexpected token 'h', "hello mini"... is not valid JSON

이성민·2023년 6월 1일
0

오늘은 mini-node-server과제가 주어졌다. 영문자를 요청 시 대소문자로 변경하여 응답하는 과제다.

  • POST에 문자열을 담아 요청을 보낼 때는 HTTP 메시지의 body(payload)를 이용합니다.
  • 서버는 요청에 따른 적절한 응답을 클라이언트로 보내야 합니다.
  • CORS 관련 헤더를 OPTIONS 응답에 적용해야 합니다.
  • 클라이언트의 preflight request에 대한 응답을 돌려줘야 합니다.
    라는 조건이 주어졌고...
    const http = require('http');
    const PORT = 4999;
    const ip = 'localhost';
    const server = http.createServer((request, response) => { //서버생성
      if(request.method === 'OPTIONS') { //사전요청 preflight request
        response.writeHead(200, defaultCorsHeader); //응답 헤더 작성 메서드(상태코드, 헤더정보 객체)
        response.end(); //응답 종료
      }
      if(request.method === 'POST'){ //포스트메서드 요청시
        let body = []; //데이터 저장 빈배열
        request.on('data', (chunk) => { //데이터를 받을 때
            body.push(chunk); //배열에 추가
          }).on('end', () => { //데이터 받아오기 완료 시
            body = Buffer.concat(body).toString();  //청크를 하나의 문자열로 합치고 변환
            response.writeHead(201, defaultCorsHeader); //성공
            if(request.url === '/lower'){ 
              response.end(body.toLowerCase()); //응답종료(소문자로 변환)
            }else if(request.url === '/upper'){  
              response.end(body.toUpperCase()); //응답종료(대문자로 변환)
            }else{
              response.writeHead(404, defaultCorsHeader); //나머지 실패
              response.end();
            }
          });
      }
    });
    server.listen(PORT, ip, () => {
      console.log(`http server listen on ${ip}:${PORT}`);
    });
    const defaultCorsHeader = {
      'Access-Control-Allow-Origin': '*',
      'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
      'Access-Control-Allow-Headers': 'Content-Type, Accept',
      'Access-Control-Max-Age': 10
    };

공식문서와 1시간정도 싸운결과 큰 어려움없이(?) 풀렸는데....

  • Uncaught (in promise) SyntaxError: Unexpected token 'h', "hello mini"... is not valid JSON

이런 오류가 뜨는것이다....json형식..?응답형식이 잘못됐나 싶어서

  • response.end(JSON.stringify(responseBody))

이렇게 바꿔보고....APP.js로 가서 건드려보고...1시간반동안 오류해결만 찾아다녔다.
그렇게 알게된것....맨처음에 서버를 실행하고 변경사항이 있을때마다 저장 > 종료 > 재실행을 해야했다. 이 불편함을 없애기 위해 npm install nodemon 을 설치했는데.......
설치하고 기존서버를 닫고 nodemon으로 재실행해야 하는거였다.....package.json의 "scripts"에 실행코드를 쓰거나 npx nodemon server/basic-server.js로 실행하면 된다....

정말 어이없는 짓을 1시간반동안 했다...나는 뭘한거지..나같은 바보가 없길 바라면서 안잊을려고 글 쓴다ㅠㅠ

profile
도전자

0개의 댓글

관련 채용 정보