본문
[2017.10.26] 06. Node.js서버와 Browser클라이언트 [데이터 통신 DB O]
컴퓨터/이론: 개발 2017. 10. 26. 01:41
도입
이번 포스팅에서는 지난 포스팅(http://heepie.tistory.com/169)에 이어 Node.js서버와 Browser클라이언트 간을 DB를 사용해 통신할 예정이다. DB는 NoSQL인 MongoDB를 사용할 예정이다.
Node.js서버와 Browser클라이언트 [데이터 통신 DB O]의 데이터 흐름
실습(GET 방식, POST 방식)
server.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | // 1. 라이브러리 가져오기 var http = require("http"); var u = require("url"); var qs = require("querystring"); // mongo DB 사용을 위한 라이브러리 var mongo = require("mongodb").MongoClient; // File Stream: 파일을 열기 위한 라이브러리 var fs = require("fs"); // 2. 서버 생성 var server = http.createServer(function(request, response) { // 주소를 제외한 url 추출 // console.log(request.url); var url = request.url; var strucedUrl = u.parse(url); var path = strucedUrl.pathname; var cmds = path.split("/"); // console.log(cmds[1]); // console.log("Create Server OK"); // RESTFul의 'html' 이라면 if (cmds[1] == "html") { console.log("Html OK"); if (request.method == "GET") { console.log("OK"); // '/' 문자 제거 var filePath = path.substring(1); console.log(path); // 파일을 연다. fs.readFile(filePath, 'utf-8',function(error, data){ if(error){ // 파일이 없다면 오류 메시지로 응답 response.writeHead(404,{'Content-Type':'text/html'}); response.end("<h1>404 Page not found!</h1>"); } else { // 파일이 존재하면 해당 파일로 응답 response.writeHead(200,{'Content-Type':'text/html'}); response.end(data); } }); } } else if (cmds[1] == "signin") { // GET Method 처리 if (request.method == "GET") { mongo.connect("mongodb://localhost:27017/serverdb", function(error, db) { if (error) { response.write(error); response.end(""); } else { var datas = qs.parse(strucedUrl.query); // console.log(datas); var cursor = db.collection("user").find(datas); // var itemArray = cursor.toArray(); // console.log(itemArray.length); // 데이터를 저장할 객체 선언 var item = { id : "", pw : "" } // dataset에 변환된 item들이 들어간다. cursor.toArray(function(err, dataset) { console.log(dataset.length); for (var i=0; i<dataset.length; i=i+1) { // 각각 데이터를 item으로 변환 item = dataset[i]; // 해당 데이터 출력 console.log(item.id); console.log(item.pw); } }); response.end("GET OK"); } }); } else if (request.method == "POST"){ var postdata = ""; request.on("data", function(fragment) { postdata += fragment; }); request.on("end", function() { mongo.connect("mongodb://localhost:27017/serverdb", function(error, db) { if (error) { response.end(error); } else { var datas = qs.parse(postdata); var cursor = db.collection("user").find(datas); cursor.toArray(function(err, dataset) { for (var i=0; i<dataset.length; i=i+1) { // 각각 데이터를 item으로 변환 item = dataset[i]; // 해당 데이터 출력 console.log(item.id); console.log(item.pw); } }); response.end("POST OK"); } }); }); } } }); // 3. 클라이언트 대기 server.listen(9000, function() { console.log("Server listening ..."); }); | cs |
스크린 샷
Client는 'postman' 툴을 사용했다. GET과 POST 모두 해당 쿼리에 따른 데이터를 추출한다.
#nodejs 서버 #몽고 db #mongo db
'컴퓨터 > 이론: 개발' 카테고리의 다른 글
[2017.10.27] 08. Node.js서버와 Android클라이언트 [데이터 통신 DB O] (0) | 2017.10.27 |
---|---|
[2017.10.26] 07. Node.js서버와 Android클라이언트 [데이터 통신 DB X] (0) | 2017.10.26 |
[2017.10.26] 05. Node.js서버와 Browser클라이언트 [데이터 통신 DB X] (0) | 2017.10.26 |
[2017.10.25] 04. Node.js서버와 Browser클라이언트 [데이터 요청] (0) | 2017.10.25 |
[2017.10.25] 03. Node.js서버와 Browser클라이언트 [데이터 전달] (0) | 2017.10.25 |
댓글