-
코드 오류의 유형과 수정 방법Node.js 2023. 12. 5. 13:23
1. 오류의 유형
- 구문 오류 Syntax Errors : 오타나 괄호 등 요소를 빼먹은 경우
- 런타임 오류Runtime Errors : 구문 오류는 발생하지 않으나 서버 실행 시 오류가 발생
- 논리 오류Logical Errors : 알고리즘 등 논리 구조에서 발생
2. 구문 오류 찾기 및 수정
- 잘 찾아서 수정하면 된다.
- VS Code 등 IDE가 수정안을 제대로 제시는 못해도 어디가 이상하다고 잘 찾아주긴 한다.
3. 런타임 오류 찾기 및 수정
const fs = require("fs"); const requestHandler = (req, res) => { const url = req.url; const method = req.method; if (url === "/") { res.write("<html>"); res.write("<head><title>Enter Message</title></head>"); res.write( '<body><form action="/message" method="POST"><input type="text" name="message"><button type-"submit">Send</button></form></body>' ); res.write("</html>"); return res.end(); } res.setHeader("Content-type", "text/html"); res.write("<html>"); res.write("<head><title>My First Page</title></head>"); res.write("<body><h1>Hello from my Node.js Server!</h1></body>"); res.write("</html>"); res.end(); }
위와 같은 코드 구조에서
if 문 안에서 return을 빼먹었다고 해보자.
npm start를 입력해보면 실행은 잘 된다. 그러나 페이지에 접속하려고 하면
오류가 발생한다.
이 오류를 자세히 살펴보자.
첫 줄에서 http header관련 오류임을 알 수 있다.
그 다음에서 '응답을 보낸 후에 헤더를 설정할 수 없다'고 한다.
그 다음에서 문제가 되는 함수부를 찾아주고 있다.
즉, if문 안에서 res.end()로 응답을 이미 보냈는데 함수가 종료되지 않아(return이 없어서)
코드를 계속 실행해나갔다.
그런데 res.setHeader()로 헤더를 설정해주려고 하니
이미 배 떠났는데 뭘 더 설정하려고 하냐? 하는 것이다.
이처럼 런타임 오류가 발생했을 때,
오류메세지를 잘 읽어보고
코드의 어느 부분이 잘못되었는지 유추할 수 있어야 한다.
다시 return을 달아주면 잘 실행된다.
3. 논리 오류 찾기 및 수정
디버그 모드를 활용하면 좋다.
다음 게시물로
'Node.js' 카테고리의 다른 글
코드 수정 후 디버그 모드 자동 재시작하기 | VS Code, Nodemon (0) 2023.12.05 VS Code의 디버그 모드 활용 | 논리 오류 찾기 (0) 2023.12.05 npm으로 제 3자 패키지 사용하기 | 서버를 자동으로 재시작하는 nodemon 설치하기 (0) 2023.12.04 npm 패키지 설정하기 (1) 2023.12.04 Node.js] 모듈 시스템 사용하기 (1) 2023.12.04