- Node-Red Web Server - HTTP-IN Node와 HTTP Response Node
- http-in http-in node와 http-response node
- template node를 사용한 Web server 예
- file-in node를 사용한 Web server 예
- http-in node와 http-response node의 객체
- Raspberry Pi와 Node-RED Dashboard 관련 페이지 보기
- http-in node와 http-response node
- http-in node 설정하기
- 팔레트에서 http-in node를 선택하여 작업공간(플로우)으로 Drag 한다.
- 플로우에서 http-in node를 더블 클릭하면 http-in node를 설정하가 위한 창이 열린다. 이 창에서 아래 항목을 편집한다.
- 메소드: HTTP method는 서버에 요청(requests)을 보내는 방법으로 GET과 POST 메소드가 가장 많이 사용하는 메소드 이다.
- URL: URL(Uniform Resource Locator)는 Web address 또는 네트워크에서 자원의 위치를 알려주기 위한 규약이다. 이 예에서는 Web server의 주소를 설정하기 위하여 사용한다. 이 란에 myserver를 입력하면 전체 주소는 URL/myserver 가 된다. 여기서 URL은 사용하는 Raspberry Pi의 인터넷 주소 이다.
- 이름: 플로우에서 이 Node를 구분하기 위한 이름을 입력한다.
- http-response 설정하기
- 팔레트에서 http-response node를 선택하여 작업공간(플로우)으로 Drag 한다.
- 플로우에서 http-response를 더블 클릭하면 http-response node를 설정하가 위한 창이 열린다. 이 창에서 아래 항목을 편집한다.
- 이름: 플로우에서 이 Node를 구분하기 위한 이름을 입력한다.
- 헤더: HTML에 대한 이해를 필요로 하기 때문에 여기서는 설명을 생략한다. 현재는 아무것도 입력하지 않아도 된다.
- template node를 사용한 Web server 예
- 팔레트에서 template node를 선택하여 작업공간(플로우)으로 Drag 한다.
- 플로우에서 template를 더블 클릭하면 template node를 설정하가 위한 창이 열린다. 이 창에서 아래 항목을 편집한다.
- 이름: 플로우에서 이 Node를 구분하기 위한 이름(예: template HTML)을 입력한다.
- 템플릿: http-response node에 전달할 Web page(실험을 위하여 아래 HTML 문서를 템플릿 창에 복사 사용 하여도 됨)를 입력한다.
Node-RED Web server는 http-in node와 http-response node를 기본 node로 사용한다.
http-in node: Client로 부터의 요청(requests)를 수락(accepts)한다.
http-response: Client의 요청에 응답한다.
http-in node를 설정하가 위한 창 예
http-in node 수정이 완료되면 "완료" 버튼을 클릭한다.
http-response node 수정이 완료되면 "완료" 버튼을 클릭한다.
<!DOCTYPE html>
<html>
<head>
<title>Node-RED web</title>
</head>
<body>
<h1>My first web</h1>
<p>My Node-RED web page.</p>
</body>
</html>
template node 수정이 완료되면 "완료" 버튼을 클릭한다.
http-in, template, http-response node를 사용하여 작성된 Web server 예
http://Raspberry_Pi_IP_ADDRESS:1880/myserver
예: 192.168.0.18:1880/myserver
Web browser에 홈페이지가 정상으로 출력된 경우 예
이 예는 파일에 저장된 HTML 페이지를 Web browser에 출력한다.
- Web page(first-html.html)를 작성하여 저장한다. 위 "template node를 사용한 Web server 예"의 HTML 문서를 복사하여 first-html.html에 저장하여 사용한다. 이 예에서는 first-html.html파일을 /home/pi/node-red/HTML/ 폴더에 저장하였다.
- 팔레트에서 file-in node를 선택하여 작업공간(플로우)으로 Drag 한다.
- 플로우에서 file-in node를 더블 클릭하면 file-in node를 설정하가 위한 창이 열린다. 이 창에서 아래 항목을 편집한다.
- 파일명: Web page(HTML File)가 저장되어 있는 폴더와 파일 주소(예: /home/pi/node-red/HTML/first-html.html)을 입력한다. 이 예는 Raspberry Pi의 /home/pi/node-red/HTML/ 폴더에 first-html.html이 저장된 경우이다.
- 출력형식: 문자열
- Encoding: utf8
- 이름: file-in HTML(이름은 플로우에서 file-in node를 다른 Node와 구분하기 위한 것이기 때문에 다른 이름을 사용하여도 된다.)
- http-in와 file-in node node를 연결 한다.
- file-in node와 http-response node를 연결 한다.
- "배포하기"를 클릭(실행)한다.
- Web browser(PC 등에서 크롬 브라우저 사용)에서 다음과 같이 Node-RED가 설치된 Raspberry Pi에 접속(Port 번호: 1880)한다.
- Web browser에 file-in node에서 입력한 홈페이지가 정상으로 출력되는지 확인한다.
file-in node 수정이 완료되면 "완료" 버튼을 클릭한다.
http://Raspberry_Pi_IP_ADDRESS:1880/myserver
예: 192.168.0.18:1880/myserver
- http-in node 객체(Object)
- http-in node는 payload, req(requests), res(response) 개체를 출력한다.
- payload: 전송 할 실제 데이터를 저장하는 Object 이다.
- req object: Client의 요청(request) 정보(속성: Property)를 갖고있는 Object 이다.
- res object: Client의 요청(request)에 응답하기 위하여 HTTP-IN Node가 생성한 객체이다.
- http-in node를 이해하기
- 윗 "Node-Red Web Server"에서 작성한 플로우에 아래와 같이 "debug" node를 추가한다.
- 팔레트에서 debug node를 선택하여 작업공간(플로우)으로 Drag 한다.
- 플로우에서 debug node를 더블 클릭하면 debug node를 설정하가 위한 창이 열린다. 이 창에서 아래 항목을 편집한다.
- 대상: 대상 드롭 상자에서 "msg 오브젝트 전체"를 선택한다.
- 출력대상: "디버그 창"을 체크한다.
- 이름: "debug msg"를 입력한다. 이름은 다른 Node와 구분하기 위한 것이기 때문에 다른 이름을 사용하여도 된다.
- http-in node와 debug node를 연결 한다.
- "배포하기"를 클릭(실행)한다.
- Web browser(PC 등에서 크롬 브라우저 사용)에서 다음과 같이 Node-RED가 설치된 Raspberry Pi의 Server로 전송하는 데이터(이 예에서는 Test=Qerry test)를 포함하여 접속(Port 번호: 1880)한다.
- Web browser에 template node에서 입력한 홈페이지가 정상으로 출력되는지 확인한다.
- Node-RED 페이지의 "디버그" 창을 선택한다.
- payload object: 전송 할 실제 데이터를 저장하는 Object 이다. 초기 상태는 empty 상태인 경우가 대부분이다.
- req object: Client의 요청(request) 정보(속성: Property)를 갖고있는 Object 이다. URL, query, parms(매개변수 정보) 등 중요한 정보를 갖고 있다.
- res object: Client의 요청(request)에 응답하기 위하여 HTTP-IN Node가 생성한 객체이다. 주로 응답 처리에 필요한 함수들을 포함하고 있다.
- GET Method를 이용한 서버에서 지정한 이름으로 파라메터(Named parameter) 전달하기
- http-in node 설정
- 팔레트에서 http-in node를 선택하여 작업공간(플로우)으로 Drag 한다.
- 플로우에서 http-in node를 더블 클릭하면 http-in node를 설정하가 위한 창이 열린다. 이 창에서 아래 항목을 편집한다.
- 메소드: 메소드 드롭 박스에서 GET 메소드를 선택한다.
- URL: "test/:name"를 입력한다. 그러면 이 Web page에 연결하기 위한 전체 주소는 URL/test 가 되고 전달되는 파라메터는 req.params.name(req Object -> params Object -> name에 전달된 파라메터가 저장됨)으로 참조할 수 있게 된다. 여기서 URL은 사용하는 Raspberry Pi의 인터넷 주소 이다.
- 이름: 플로우에서 이 Node를 구분하기 위한 이름을 입력한다.
- 팔레트에서 switch node를 선택하여 작업공간(플로우)으로 Drag 한다.
- 플로우에서 switch node를 더블 클릭하면 switch node를 설정하가 위한 창이 열린다. 이 창에서 아래 항목을 편집한다.
- 이름: 플로우에서 이 Node를 구분하기 위한 이름을 입력한다.
- 프로퍼티: 프로퍼티 드롭 박스에서 "expression"을 선택하고, 프로퍼티 란에 "req.params.name"을 입력한다.
- Switching 조건 입력 창: 조건 입력 창의 첫번째 줄의 드롭 박스에서 "=="을 선택하고, 옆에 계속되는 드롭 박스에서 "string"을 선택하고 ":page1"을 입력한다.
- 조건 입력 창아래 "+추가" 버튼을 사용하여 조건 열을 추가한다.
- 추가된 조건 열의 드롭 박스에서 "=="을 선택하고, 옆에 계속되는 드롭 박스에서 "string"을 선택하고 ":page2"을 입력한다.
- 아래와 같이 Web page를 작성하여 page1.html로 저장한다. 이 예에서는 page1.html파일을 /home/pi/node-red/HTML/ 폴더에 저장하였다.
주: 데이터를 전송할 때, 헤더와 메타데이터, 에러 체크 비트 등과 같은 다양한 요소들을 함께 보내어, 데이터 전송의 효율과 안정성을 높히게 된다. 이 때, 보내고자 하는 데이터 자체를 의미하는 것이 페이로드(payload)이다
"debug의 노드 수정" 창의 "완료" 버튼을 클릭한다.
위에서 작성한 Web server에 debug node를 연결한 Web server 플로우 예
http://Raspberry_Pi_IP_ADDRESS:1880/myserver?Test=Qerry test
예: 192.168.0.18:1880/myserver?Test=Qerry test
http-in node의 msg 객체는 payload, req, res 객체를 포함하고 있다. "디버그" 창에서 payload, req, res 객체를 전개(객체 이름 좌측의 삼각형을 클릭하면 객체 내용이 전개된다.)하여 내용을 확인한다.
http-in node의 msg 객체(payload, req, res 객체를 포함)를 보여주는 debug 창 예
GET Method를 이용하여 서버에 파라메터(parameter) 전달하고, 전달된 파라메터에 따라 서버가 다른 응답을하는 예이다. 전달된 파라메터가 :page1 인 경우 page1.html 파일이 전송(응답)되고 :page2 인 경우 page2.html 파일이 전송된다.
GET Method를 이용한 파라메터(parameter) 전달 실험을 위한 플로우 예
http-in node 수정이 완료되면 "완료" 버튼을 클릭한다.
전달된 파라메터(req.params.name)에 따라 다른 Web page가 출력(응답)되도록 하기 위한 설정이다.
switch node 수정이 완료되면 "완료" 버튼을 클릭한다.
switch node 설정 창 예
<!DOCTYPE html>
<html>
<head>
<title>Node-RED web</title>
</head>
<body>
<h3>Message path</h3>
<h4>Using named parameters</h4>
<p>Selected web page: Page 1</p>
</body>
</html>
</body>
</html>
- 파일명: page1.html 파일의 주소(예: /home/pi/node-red/HTML/page1.html)를 입력한다.
- 출력형식: 문자열
- Encoding: utf8
- 이름: file-in Page1(이름은 플로우에서 file-in node를 다른 Node와 구분하기 위한 것이기 때문에 다른 이름을 사용하여도 된다.)
file-in node 수정이 완료되면 "완료" 버튼을 클릭한다.
http://Raspberry_Pi_IP_ADDRESS:1880/test/:page1
예: 192.168.0.18:1880//test/:page1
http://Raspberry_Pi_IP_ADDRESS:1880/test/:page2
예: 192.168.0.18:1880//test/:page2
Web browser에 page1.html Web page가 출력(응답)된 예
- Node-RED 페이지의 우측에서 "디버그" 창을 선택한다.
- http-in node의 msg 객체는 payload, req, res 객체를 포함하고 있다. "디버그" 창에서 req 객체를 전개(객체 이름 좌측의 삼각형을 클릭하면 객체 내용이 전개된다.) 한다.
- params 객체를 전개하면 아래와 같이 name:에 문자열 ":page1"이 전달된 것을 확인할 수 있다.
http-in node에 전달된 파리메터(req.params.name)를 보여주는 debug 창 예
- 쿼리 파라메터는 ? 문자와 키 값(key value)을 사용하여 URL에 전달된다.
- 각 쿼리 파라메터는 & 문자를 사용하여 구분된다.
- 쿼리(Query) 파라메터(parameter)를 URL에 포함(GET Method)하여 전달하는 예
- 아래 같이 플로우를 작성하고 http-in node의 메소드를 "GET"으로, URL를 "test"로 설정한다.
- template node의 템플릿에 아래 HTML Page을 입력한다.
쿼리(Query) 파라메터(parameter) 전달 실험을 위하여 debug node를 연결한 server 플로우
<!DOCTYPE html>
<html>
<head>
<title>Node-RED web</title>
</head>
<body>
<h3></h3>Query parameters testing</h3>
<p>first name: {{req.query.first}}</p>
<p>last name: {{req.query.last}}</p>
</body>
</html>
http://Raspberry_Pi_IP_ADDRESS:1880/test/?first=KilDong&last=Hong
예: http://192.168.0.18:1880/test/?first=KilDong&last=Hong
윗 HTML Page의 실행 결과 Web browser에 쿼리가 출력(응답)된 예
http-in node에 전달된 쿼리 파리메터(req.query.first 와 req.query.last)를 보여주는 debug 창 예
http://Raspberry_Pi_IP_ADDRESS:1880/test/?id=1&id=2
예: 192.168.0.18:1880//test/?id=1&id=2
http-in node에 전달된 쿼리 파리메터를 보여주는 debug 창 예
- http-response node의 메시지 객체(payload Object, req Object, res Object를 갖고있다.)는 http-in 노드에서 시작된 객제이다.
- 이 노드 또는 이전 노드에서 응답 코드 및 기타 메시지 헤더를 입력(또는 설정)할 수 있다.
- http-in 노드로 부터 생성된 메시지 객체에 아래 정보를 추가로 입력할 수 있다.
- payload: Client에 전송할 정보(데이터). HTML File 등
- statuscode: Client에 전송할 상태 코드.
- headers: HTML 문서의 Header section에 포함되는 정보.
- cookies: 웹 서버가 브라우저에게 지시하여 사용자의 로컬 컴퓨터에 파일 또는 메모리에 저장하는 작은 기록 정보.