글 목차
(1) Node.js로 RESTful API 만들기 - POST편
(2) Node.js로 RESTful API 만들기 - GET편
현재글 >> (3) Node.js로 RESTful API 만들기 - PUT편
(4) Node.js로 RESTful API 만들기 - DELETE편
(5) RESTful API 활용하기 - 웹편 (작성중)
(6) RESTful API 활용하기 - 안드로이드 앱편 (작성중)
* 프로젝트 세팅 과정은 (1) Node.js로 RESTful API 만들기 - POST편 을 참고하세요!
이제 PUT이다! myGames 테이블 상태는 대략 이러한데,
2번 title인 gta를 grand theft auto로 바꿔보는 실습을 해 보겠다.
./routes/index.js
이제 코드가 조금 길어졌다. 하지만 PUT 구현 부분은 몇 줄 안되니 그 쪽 라인만 보면 된다.
gta를 grand theft auto로 바꾸고 싶다면, localhost:3000/games/3에서 { title: "grand theft auto"} 로 PUT 요청을 보내면 된다.
외부에서 오는 요청에 대해서 인젝션 어택을 방지하기위해 모두 mysql.escape()를 쓰는 것이 보안 상 좋다.
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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | var async = require("async"); var mysql = require("mysql"); module.exports = function(app, pool) { // >> Index page app.get("/", function(req, res) { // GET 메소드 /games로 넘어감 res.redirect("/games"); }); // >> POST app.post("/games", function(req, res) { var result = {}; var title = null; async.waterfall([ function(callback) { title = mysql.escape(req.body.title); callback(); }, function(callback) { if (title == undefined) { callback(new Error("Title is empty.")); } else { // db에 연결하여 sql 수행 pool.getConnection(function(err, conn) { // title 정보를 DB에 넣기 위한 SQL문 준비 var sql = "INSERT INTO myGames (title) VALUES (" + title + ");"; console.log("SQL: " + sql); conn.query(sql, function(err) { if (err) { // err가 떠도 conn은 release() 꼭 해주어야한다. conn.release(); callback(err); } else { conn.release(); callback(); } }); }); } }], function(err) { result = returnResult(err, res) result.status = res.statusCode; res.send(result); }); }); // >> GET app.get("/games", function(req, res) { var result = {}; // db에 연결하여 sql 수행 pool.getConnection(function(err, conn) { var sql = "SELECT * from myGames;"; conn.query(sql, function(err, rows) { var result = returnResult(err, res); if (rows) { result.message = rows; } conn.release(); result.status = res.statusCode; res.send(result); }); }); }); // >> GET/id app.get("/games/:id", function(req, res) { var result = {}; // SQL injection attack 방지위해 mysql.escape(); var id = mysql.escape(req.params.id); // db에 연결하여 sql 수행 pool.getConnection(function(err, conn) { var sql = "SELECT * from myGames WHERE id=" + id + ";"; conn.query(sql, function(err, rows) { var result = returnResult(err, res); if (rows) { result.message = rows; } conn.release(); result.status = res.statusCode; res.send(result); }); }); }); // >> PUT app.put("/games/:id", function(req, res) { var result = {}; var id = null; var title = null; async.waterfall([ function(callback) { id = mysql.escape(parseInt(req.params.id)); title = mysql.escape(req.body.title); callback(); }, function(callback) { if (id == undefined) { callback(new Error("Id is empty.")); } else if (title == undefined) { callback(new Error("Title is empty.")); } else { // db에 연결하여 sql 수행 pool.getConnection(function(err, conn) { // title 정보를 업데이트 하기 위한 SQL var sql = "UPDATE myGames SET title=" + title + " WHERE id=" + id + ";"; console.log("SQL: " + sql); conn.query(sql, function(err) { if (err) { // err가 떠도 conn은 release() 꼭 해주어야한다. conn.release(); callback(err); } else { conn.release(); callback(); } }); }); } }], function(err) { result = returnResult(err, res) result.status = res.statusCode; res.send(result); }); }); } var returnResult = function(err, res) { // 결과를 눈으로 보기 쉽게하기 위해 result 객체 생성 var result = {}; if (err) { res.status(400); result.message = err.stack; } else { res.status(200); result.message = "Success"; } return result; } | cs |
실행 결과
Postman을 이용해서 PUT 요청을 보내 보겠다. 실행전 DB 테이블 상태는 글 맨 앞의 사진과 같다.
아래와 같이 세팅 해 준다음 Send 버튼을 누르면,
Status Code 200이 뜨면서 성공적으로 변경이 완료되었음을 알린다.
MYSQL에 들어가 조회해보면 아래와 같이 바뀐 것을 알 수 있다.
'프로그래밍 > JS, Node.js' 카테고리의 다른 글
Node.js 앱에서 NPM으로 Bootstrap/JQuery 다운 받아 사용하기 (0) | 2017.03.24 |
---|---|
(4) Node.js로 RESTful API 만들기 - DELETE편 (4) | 2017.01.24 |
(2) Node.js로 RESTful API 만들기 - GET편 (1) | 2017.01.24 |
(1) Node.js로 RESTful API 만들기 - POST편 (3) | 2017.01.24 |
JavaScript 배우기 좋은 사이트 추천 (0) | 2017.01.05 |