생활코딩으로 node.js 강의를 따라 들으며 배우던 중
10강에서 에러가 뜨고 이해가 안되는 부분이 있어서 학습에 진행이 생겼다
혹시나 나와 같은 경우를 겪는 분들이 있을까해서 10강의 내용을 개인적으로 보충하려 한다
https://opentutorials.org/course/3332/21046
위 강의 내용를 보면 이전까지는 http://localhost:3000/1.html 처럼 url 의 / 뒤에 상대 경로로 페이지를 받아왔는데
http://localhost:3000/?id=CSS 와 같이 id 값을 쿼리로 받아오고 있다
따로 설명하시진 않으셨는데, url 을 우리가 직접 수정해서 1.html과 같은 부분을 ?id=CSS 와 같이 직접 바꿔주자
그리고 require('url') 을 통해 rul 모듈을 불러와서 변수 url 로 정의하여
var queryData = url.parse(_url, true).query; 와 같이 사용해서 쿼리값으로 데이터를 받아오고 있는데
url.parse().query 를 사용한 방법은 Deprecate (오래된 기술이라 더이상 기술지원되지 않음) 되었으므로
var queryData = new URL('http://localhost:3000' + _url).searchParams; 로 대체해주면 된다
response.end(queryData.id); 부분에서도 더 이상 url.parse를 사용하지 않으니
response.end(queryData.get(id)); 와 같이 사용하면 강의에서와 같이 출력 가능하다
전체 코드 및 주석은 아래와 같다굿
var http = require("http");
// var fs = require("fs"); // fs 모듈을 사용한 부분을 지웠으므로 주석처리
// var url = require("url"); // url.parse 가 지원안되므로 불필요
var app = http.createServer(function (request, response) {
var _url = request.url;
// url.parse 를 대체할 새로운 기술로 절대경로를 인자로 갖는 URL 객체를 이용한다
const queryData = new URL("http://localhost:3000" + _url).searchParams;
// var queryData = url.parse(_url, true).query; // 더이상 사용, 지원되지 않는다
console.log(queryData.get("id")); // URL 객체 내 get 메소드로 속성 가져오기
if (_url == "/") {
_url = "/index.html";
}
if (_url == "/favicon.ico") {
response.writeHead(404);
response.end();
return;
}
response.writeHead(200);
response.end(queryData.get("id")); // 클라이언트에게 괄호 안의 데이터를 보내고 응답을 끝낸다
});
app.listen(3000); // 3000 번 포트를 사용한다
'Node.js > 이론 및 용어' 카테고리의 다른 글
path 모듈로 상대 경로 제거를 이용한 보안 방법 (0) | 2022.09.02 |
---|---|
생활코딩 node.js 32강에 querystring 모듈을 대체하기 feat.URLSearchParam (0) | 2022.08.23 |
[Node.js] 왜 url 이 두번 출력 되는 건데? feat. favicon.ico (0) | 2022.08.16 |
Node.js 란? (0) | 2022.08.11 |
댓글